Czy skrypt dash, ash i sh jest w 100% kompatybilny?

16

Chciałem wiedzieć, czy skrypty napisane dla dash, ash i sh są w 100% kompatybilne?

Czy są jakieś dodatkowe funkcje myślnika, jesionu lub zmiany składni?

Z tego, co słyszałem, popiół jest bezpośrednim potomkiem sh.

użytkownik1115057
źródło
jesion jest paskowaną formą uderzenia
Joe
4
Źródło? Nie widziałem nic, co powiedziałoby, że popiół jest powiązany z bash
1115057,
Dlaczego ludzie nie mieliby po prostu przesyłać łatek do bashu zamiast tworzyć wszelkiego rodzaju muszle, co cały czas mnie buforuje. Jeśli naprawdę chcesz wiedzieć, przeczytaj instrukcję, np.man ash
stokrotka
2
Zgadza się, to nie potomek po bashu. Bardziej precyzyjnie byłoby powiedzieć, że są potomkami sh (oryginalna powłoka Bourne'a), ale nie jest to również w pełni poprawne.
Zlatko,
Możesz użyć tego narzędzia checkbashismsdo przetestowania, czy twój skrypt jest zgodny z POSIX.
donotings udane

Odpowiedzi:

18

Krótka odpowiedź brzmi: nie, nie są w 100% kompatybilne.

Ale większość pocisków jest dość zbliżona do podstawowej, więc rzadko wpadałbyś na niespójności. W rzeczywistości większość powłok różni się niewiele dodaną składnią, ale dodatkowymi funkcjami, takimi jak uzupełnianie tabulatorami i podobne.

Jest też dashswego rodzaju potomkiem ash- lub portu od BSD do Linuksa, a ściślej. I wszyscy powinni być potomkami lub różnymi implementacjami sh. W rzeczywistości, shjest w większości systemów prostu dowiązaniem do bash, dashlub coś innego. Liczy się zgodność z POSIX - a kiedy piszesz skrypty zgodnie ze standardami, nie napotkasz problemów.

Różnica między tymi powłokami polega na optymalizacji i wydajności. Są mniej bogate w funkcje bash, ale są w pełni uzasadnionymi powłokami. Bash jest bogaty w funkcje do pracy interaktywnej, ale na przykład zużywa więcej pamięci.

Zlatko
źródło
Ale jeśli chodzi o użycie skryptu, są one kompatybilne?
user1115057,
A jeśli chodzi o zgodność z POSIX, nawet jeśli przestrzegam tego standardu, jeśli skrypt jest napisany dla Basha, nie sądzę, aby działał na dowolnym sh lub jego potomku
1115057
Powinny być ze sobą kompatybilne, jeśli nie korzystasz z niektórych niejasnych funkcji. Ale jeśli użyjesz skryptu bash, możesz napotkać więcej problemów.
Zlatko,
nigdy nie zamierzałem używać basha z sh, ash lub dash. Jakie są te niejasne funkcje?
user1115057,
1
wiele nowszych funkcji bash to dodatki w stosunku do POSIX, więc jest coraz bardziej prawdopodobne, że napiszesz kod, którego nie można przenieść, jeśli go używasz. IIRC nawet konstrukcja [[]] nie jest w sh. Uważaj też, że jeśli nie piszesz czystego skryptu powłoki, w grę wchodzi również różnica w narzędziach (różne wersje sed, grep, awk ...).
lynxlynxlynx
1

Należy wspomnieć, że w niektórych systemach, w szczególności Debian, / bin / ash nie jest dostępny:

$ type ash dash
bash: type: ash: not found
dash is /bin/dash
Steven Penny
źródło
2
Mogą mieć zajęty popiół.
muru,