Jak wspomniano, bashjest 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 bashpowłoka obsługuje niektóre rozszerzenia, które nie są obsługiwane przez dashpowłokę Bourne'a lub cokolwiek innego, na co /bin/shwskazuje 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/shporównaniu do, /bin/basha otrzymasz bardzo różne dane wyjściowe.
To samo dotyczy zsh, chociaż obsługuje większość bashskładni, oferuje dodatkowe rozszerzenie i składnię, które nie są obsługiwane przez bashpowł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, bashdlatego 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 zshjakiejkolwiek 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 .
zshmogą 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.