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.


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.


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

2
Mogą mieć zajęty popiół.
— muru,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.