Wszystkie odmiany języka powłoki Bourne'a są obiektywnie okropne w porównaniu do współczesnych języków skryptowych, takich jak Perl, Python, Ruby, node.js, a nawet (prawdopodobnie) Tcl. Jeśli musisz zrobić coś nawet trochę skomplikowanego, na dłuższą metę będziesz szczęśliwszy, jeśli użyjesz jednego z powyższych zamiast skryptu powłoki.
Jedyną zaletą, jaką język powłoki ma nadal w porównaniu z nowszymi językami, jest to, że istnieje pewność, że coś , co nazywa się samym, /bin/sh
istnieje na wszystkim, co może być uniksowe. Jednak to coś może nawet nie być zgodne z POSIX; wiele starszych, unikatowych uniksów zamroziło język /bin/sh
i narzędzia w domyślnej PATH przed zmianami wymaganymi przez Unix95 (tak, Unix95, dwadzieścia lat temu i wciąż rośnie). Może być zestaw Unix95, a nawet POSIX.1-2001, jeśli masz szczęście, narzędzia w katalogu innym niż domyślna ŚCIEŻKA (np. /usr/xpg4/bin
), Ale nie gwarantuje się, że istnieją.
Jednak podstawy Perla częściej występują w arbitralnie wybranej instalacji Uniksa niż Bash. (Przez „podstawy Perla” mam na myśli, że /usr/bin/perl
istnieje i jest to pewna , być może dość stara, wersja Perla 5, a jeśli masz szczęście, dostępny jest także zestaw modułów dostarczonych z tą wersją interpretera).
W związku z tym:
Jeśli piszesz coś, co musi działać wszędzie, co rzekomo jest uniksowe (np. Skrypt „konfiguruj”), musisz go użyć #! /bin/sh
i nie musisz używać żadnych rozszerzeń. W dzisiejszych czasach napisałbym w tej sytuacji powłokę zgodną z POSIX.1-2001, ale byłbym przygotowany na załatanie POSIXizmu, gdyby ktoś poprosił o wsparcie dla zardzewiałego żelaza.
Ale jeśli nie piszesz czegoś, co musi działać wszędzie, to w momencie, gdy masz ochotę w ogóle użyć bashizmu, powinieneś przerwać i przepisać całość w lepszym języku skryptowym. Twoje przyszłe ja będzie ci wdzięczne.
(Tak, gdy jest to stosowne korzystać z rozszerzeń bash pierwszej kolejności: nigdy do drugiej kolejności: tylko przedłużyć interaktywne środowisko Bash - np dostarczenie inteligentnych zakładki dopełniania i fantazyjne wyświetlanymi?.).
#!/bin/sh
i nie używaj niczego innego niż to, co zapewnia oryginalna powłoka.