Istnieje wiele programów, które implementują język /bin/sh. Na Ubuntu /bin/shjest dash, który ma być szybki, zużywać niewielką ilość pamięci i nie obsługuje dużo więcej, niż oczekiwane minimum /bin/sh. Na RHEL /bin/shjest bash, który jest wolniejszy i zużywa więcej pamięci, ale ma więcej funkcji. Jedną z tych funkcji jest ==operator [składni warunkowej. Dash obsługuje [, co jest podstawową funkcją sh, ale nie ma ==operatora, który jest rozszerzeniem bash (i ksh i zsh).
Możesz przełączyć system na bash. Na Ubuntu /bin/shjest dowiązaniem symbolicznym dash. Zamiast tego możesz uczynić z niego link symboliczny bash. Obecne wersje Debiana i Ubuntu (i pochodnych) sprawiają, że jest to opcja instalacji dash. Aby to zmienić, uruchom
sudo dpkg-reconfigure dash
i odpowiedz „tak”, aby zachować myślnik jako /bin/shlub „nie”, aby przejść do bash.
Możesz zachować Bash jako /bin/sh, ale spowoduje to, że twój system będzie trochę wolniejszy. Jest nawet możliwe, że jakiś skrypt systemowy jest niezgodny z bash, chociaż jest to mało prawdopodobne, ponieważ bash jest przeważnie nadzbiorem dash.
W przypadku dystrybucji, które nie mają interfejsu do wyboru pomiędzy implementacjami /bin/sh, oto jak przejść na bash.
sudo ln -s bash /bin/sh.bash
sudo mv /bin/sh.bash /bin/sh
Pozostaw terminal otwarty i sprawdź, czy nadal możesz uruchamiać niektóre shskrypty. Jeśli zepsujesz to polecenie, spowoduje to, że twój system będzie bezużyteczny. (Nawiasem mówiąc, powodem, dla którego użyłem wielu powyższych poleceń zamiast prostego wyglądu, sudo ln -sf bash /bin/shjest to, że ln -sfnie jest atomowy. W bardzo mało prawdopodobnym przypadku awarii komputera podczas tej operacji, musisz uruchomić komputer z nośnika ratunkowego, aby go przywrócić. Przeciwnie, mvjest atomowy.)
Aby przywrócić myślnik jako /bin/sh:
sudo ln -s dash /bin/sh.dash
sudo mv /bin/sh.dash /bin/sh
Zauważ, że jeśli sh jest /bin/bashdomyślnie w twojej dystrybucji, przejście na myślnik może spowodować awarię skryptów, ponieważ bash ma o wiele więcej funkcji niż myślnik. Skrypty Bash powinny zaczynać się od #!/bin/bash, a skrypty rozpoczynające się od #!/bin/shnie powinny używać funkcji specyficznych dla bash, ale dystrybucje dostarczane z bash /bin/shmogą używać funkcji specyficznych dla bash w #!/bin/shskryptach specyficznych dla tej dystrybucji (jest to w porządku, o ile użytkownicy nie oczekują, że użytkownicy można zmienić na myślnik jako /bin/shi nie ma żadnych oczekiwań, że te skrypty będą działać w innej dystrybucji).
==co powinno być=. To i że zmienne rozszerzenia powinny być podwójnie cytowane.