Există vreo Bash
tacâmul în mod obiectiv mai bine decât altele pentru cele mai foloseste?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Îmi amintesc vag de o lungă perioadă de timp în urmă auzind că adăugând un strop la sfârșitul împiedică pe cineva care trece o comandă de script-ul dvs., dar nu pot găsi detalii pe asta.
Ar trebui să utilizați #!/usr/bin/env bash
pentru portabilitate: diferite *nix-urile puse bash
în diferite locuri, și folosind /usr/bin/env
este o soluție pentru a rula primul bash
a găsit pe "CALE". Și sh
nu este bash
.
/bin/sh
este, de obicei, un link la sistemul de's shell implicit, care este de multe ori bash
dar privind, de exemplu, sistemele Debian este greutate mai mica "dash". Oricum, original Bourne shell-ul este sh, deci, dacă script-ul dvs. utilizează unele bash
(a 2-a generație, "Bourne din Nou sh") caracteristici specifice ([[ ]]
teste, tablouri, diverse dulciuri, etc.), apoi, ar trebui să fie mai specifice și de a folosi mai târziu. În acest fel, pe sistemele unde bash nu este instalat, scenariul a câștigat't run. Am înțeles că poate fi un interesant trilogie de filme despre aceasta evolutie...dar care ar putea fi auzite.
De asemenea, rețineți că, atunci când a evocat ca sh
, bash
o oarecare măsură se comportă ca POSIX standard " sh " (a se vedea, de asemenea, GNU docs despre acest lucru).
Folosind un circ linie a invoca caz interpretul nu este doar pentru BASH. Puteți utiliza tacâmul pentru orice limbaj interpretat pe sistemul dumneavoastră, cum ar fi Perl, Python, PHP (CLI) și multe altele. Apropo, shebang
#!/bin/sh -
(acesta poate fi, de asemenea, două linii, și anume,--
) se termină bash opțiuni totul după ce vor fi tratate ca nume de fișiere și argumente.
Folosind "mediu" comanda face script-ul dvs. portabil și vă permite să setați medii personalizate pentru script-ul dvs., prin urmare, portabil script-uri ar trebui să utilizați
#!/usr/bin/env bash
Sau pentru orice limbă, cum ar fi pentru Perl
#!/usr/bin/env perl
Fi sigur să se uite la " om " pagini pentru bash
:
man bash
și "mediu":
man env
Notă: Pe Debian și Debian-based sisteme, cum ar fi Ubuntu, " sh "este legat de "dash" nu bash
. Ca tot sistemul de script-uri folosesc "sh". Aceasta permite bash să crească și sistemul să rămână stabilă, potrivit Debian.
De asemenea, pentru a menține invocare *nix cum n-am mai folosi extensiile de fișiere pe tacâmul invocat script-uri, cum nu se poate omite extensie pe invocarea pe executabile ca tine poate pe Windows. Fișierul de comandă poate identifica ca pe un scenariu.
Am recomandăm să utilizați:
#!/bin/bash
L's nu 100% portabil (unele sisteme loc bash
într-un alt loc decât /bin
), dar faptul că o mulțime de script-uri existente folosi #!/bin/bash
presiuni diferite sisteme de operare pentru a face/bin/bash` cel puțin o legătură simbolică la locația principală.
Alternativa:
#!/usr/bin/env bash
a fost sugerat, dar nu's nici o garanție că "mediu" de comandă este în /usr/bin
(iar eu'am folosit sistemele de unde e't). În plus, acest formular se va utiliza prima instanță a bash
din utilizatorii actuali $CALE
, care nu ar putea fi o versiune adecvat de bash shell.
Dacă aveți nevoie de un script pentru a rula pe un sistem care nu't au `/bin/bash, puteți modifica script-ul pentru a indica locația corectă (ca's, desigur, incomod).
Am'am discutat despre compromisuri în mai mare profunzime în răspunsul meu la această întrebare.
O oarecum obscur update: Un sistem folosesc, Termux, un desktop Linux-ca strat care ruleaza sub Android, nu't au /bin/bash
(bash
este /date/date/com.termux/files/usr/bin/bash
) - dar are o manipulare specială pentru a sprijini #!/bin/bash
.
Este într-adevăr depinde cum ai scrie scripturi bash. Dacă /bin/sh
este symlinked să bash, când bash este invocat ca "sh", unele caracteristici nu sunt disponibile.
Dacă doriți bash-specifice, non-POSIX caracteristici, utilizare #!/bin/bash