Chciałem wiedzieć, czy skrypty napisane dla myślnika, popiołu i sh są w 100% zgodne?
Czy są jakieś dodatkowe funkcje myślnik czy popiół czy zmiana składni?
Z tego, co słyszałem, ash jest bezpośrednim potomkiem sh.
Komentarze
Odpowiedź
Krótka odpowiedź brzmi: nie, oni „nie są w 100% kompatybilne.
Jednak większość powłok jest dość zbliżona do podstawowej, więc rzadko można napotkać niespójności. W rzeczywistości, większość powłok nie różni się zbytnio dodaną składnią, ale kilkoma dodatkowymi funkcjami, takimi jak uzupełnianie tabulatorami i tym podobne.
Ponadto dash
jest następcą ash
— lub, mówiąc dokładniej, port z BSD do Linuksa. I wszystkie z nich powinny być potomkami lub różnymi implementacjami sh
. W rzeczywistości sh
w większości systemów jest po prostu dowiązaniem symbolicznym do bash
, dash
lub czegoś innego. Liczy się zgodność z POSIX — i kiedy piszesz skrypty zgodnie ze standardami, nie będziesz mieć problemów.
Różnica między tymi powłokami polega na optymalizacji i wydajności. Są mniej bogate w funkcje niż bash
, ale są w pełni legalnymi powłokami. Bash jest bogaty w funkcje do pracy interaktywnej, ale na przykład zużywa więcej pamięci.
Komentarze
- Czy są one kompatybilne w przypadku używania skryptów?
- A jeśli chodzi o zgodność z POSIX, nawet jeśli będę postępować zgodnie z tym standardem, jeśli skrypt jest napisany dla Bash, nie sądzę, że będzie działał na jakimkolwiek sh lub jego potomku
- Powinny być kompatybilne ze sobą, jeśli ' nie używasz pewnych niejasnych funkcji. Ale jeśli używasz skryptu bash, możesz napotkać więcej problemów.
- nigdy nie zamierzałem używać basha z sh, ash lub dash. Co to za niejasne funkcje?
- wiele nowszych funkcji bash ' to dodatki w stosunku do POSIX, więc jest coraz bardziej prawdopodobne, że napiszesz nieprzenośny kod, jeśli ' ponownie ich używam. IIRC nawet konstrukcja [[]] nie jest w sh. Uważaj także, jeśli ' nie piszesz czystego skryptu powłoki, w grę wchodzą również różnice w narzędziach (różne wersje sed, grep, awk …).
Odpowiedź
Należy wspomnieć, że w niektórych systemach, zwłaszcza w Debianie, / bin / ash nie jest dostępne:
$ type ash dash bash: type: ash: not found dash is /bin/dash
Komentarze
- Mogą mieć popiół busybox.
- Mimo to istnieje wiele systemów, które ' nie mają
bash
.
man ash
checkbashisms
, aby sprawdzić, czy Twój skrypt jest zgodny z POSIX.