Is er een Bash
pakket dat objectief beter is dan de anderen voor de meeste toepassingen?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Ik kan me vaag herinneren dat ik lang geleden gehoord heb dat het toevoegen van een streepje aan het eind voorkomt dat iemand een commando doorgeeft aan je script, maar ik kan daar geen details over vinden.
U moet #!/usr/bin/env bash
gebruiken voor portabiliteit: verschillende *nixen zetten bash
op verschillende plaatsen, en het gebruik van /usr/bin/env
is een workaround om de eerste bash
te draaien die op de PATH
te vinden is. En sh
is niet bash
.
/bin/sh
is meestal een link naar de standaard shell van het systeem's, die vaak bash
is, maar op, bijvoorbeeld, Debian systemen is het de lichtere dash
. Hoe dan ook, de originele Bourne shell is sh
, dus als je script een aantal bash
(2e generatie, "Bourne Again sh") specifieke functies gebruikt ([ ]]
tests, arrays, diverse suikerachtige dingen, enz.), dan moet je specifieker zijn en de latere gebruiken. Op deze manier, op systemen waar bash niet is geinstalleerd, zal je script'niet lopen. Ik heb begrepen dat er een spannende trilogie films kan zijn over deze evolutie...maar dat zou van horen zeggen kunnen zijn.
Merk ook op dat wanneer sh
wordt aangeroepen, bash
zich tot op zekere hoogte gedraagt als POSIX standaard sh
(zie ook de GNU docs hierover).
Het hangt er echt vanaf hoe je je bash scripts schrijft. Als je /bin/sh
symlinkt aan bash, wanneer bash wordt aangeroepen als sh
, zijn sommige functies niet beschikbaar.
Als je bash-specifieke, niet-POSIX functies wilt, gebruik dan #!/bin/bash