Jak wspomniano, bash
jest powszechnie dostępny w domyślnej instalacji dla wielu dystrybucji. Twój skrypt nie osiągnie największej liczby użytkowników, polegając na nim zsh
.
Ważnym pytaniem, na które należy odpowiedzieć przed zaprojektowaniem skryptu, jest „ Dlaczego ma znaczenie, w której powłoce jest wykonywany skrypt? ”
Różne powłoki używają innej składni lub oferują dodatkowe funkcje powłoki, które mogą nie być obsługiwane przez inne powłoki. Aby napisać skrypt dla „ogólnego świata użytkowników końcowych systemu Linux”, określ, czy twój skrypt korzysta z funkcji składni lub powłoki zależnych od określonego środowiska powłoki.
Na przykład bash
powłoka obsługuje niektóre rozszerzenia, które nie są obsługiwane przez dash
powłokę Bourne'a lub cokolwiek innego, na co /bin/sh
wskazuje system użytkownika.
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 Feb 19 2014 /bin/sh -> dash
Spróbuj wykonać echo {1..10}
w /bin/sh
porównaniu do, /bin/bash
a otrzymasz bardzo różne dane wyjściowe.
To samo dotyczy zsh
, chociaż obsługuje większość bash
składni, oferuje dodatkowe rozszerzenie i składnię, które nie są obsługiwane przez bash
powłokę. Zobacz te tabele porównujące powłoki dla konkretnych przykładów.
Możesz poszerzyć swoją potencjalną bazę użytkowników bash
, stosując się do skryptów, które działają po wywołaniu #!/bin/sh -u
. Rodzi to jednak inne ważne pytanie: „ Co poświęca się w zamian za większą przenośność? ”
Ustal, czy różnice związane z kwestiami bezpieczeństwa, funkcjonalnością, wydajnością, czy cokolwiek innego, co Twoim zdaniem jest priorytetem dla twojego skryptu, byłoby warte poświęcenia. Skrypt ze znaną luką w zabezpieczeniach może nie być potrzebny tylko dlatego, że działa w większej liczbie środowisk.
Napisano tak wiele skryptów, bash
dlatego obsługa tych skryptów jest używana jako kryterium przy porównywaniu powłok poleceń . Znacznie więcej osób będzie mogło uruchomić Twój skrypt, niż gdyby polegał on na zsh
jakiejkolwiek innej składni wyłącznej dla środowiska powłoki.
Pamiętaj też, że ostatecznie nie masz kontroli nad sposobem wykonywania skryptu przez użytkownika (przydatne również przy debugowaniu skryptów w różnych powłokach ):
Pamiętaj, że jeśli użyjesz powłoki do odczytania skryptu powłoki („sh nazwa skryptu”), zamiast wykonać go bezpośrednio („./scriptname”), powłoka potraktuje wszystkie komentarze na początku skryptu powłoki jako komentarze. W szczególności komentarz określający interpretera do użycia podczas wykonywania skryptu („#! / Bin / sh -u”) zostanie zignorowany, podobnie jak wszystkie opcje wymienione obok tego interpretera.
Najlepszym sposobem na zrobienie tego jest uczynienie skryptów przenośnymi, o ile nie ma wielkiego poświęcenia dla jego działania.
Możesz także zobaczyć konwencje kodowania Bash - Przepełnienie stosu .
zsh
mogą być popularne, podczas gdy w innych (sektor bankowy) jest to praktycznie niespotykane. Myślę, że powinieneś podać o wiele więcej informacji, jeśli potrzebujesz właściwej porady na ten temat.