Czy skrypt Dash, Ash i Sh script są w 100% kompatybilne?

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

  • popiół to prążkowana forma basha
  • Źródło? Nie widziałem nic, co by powiedziało, że popiół jest powiązany z bashem
  • Dlaczego nie ' t ludzie po prostu przesyłają łaty do basha zamiast tworzyć wszelkiego rodzaju powłoki, to mnie boli cały czas. Jeśli naprawdę chcesz się dowiedzieć, przeczytaj instrukcję, np. man ash
  • Prawidłowo, to ' nie jest potomkiem grzmotnąć. Bardziej precyzyjne byłoby stwierdzenie, że ' są potomkami sh (oryginalna powłoka Bournea), ale ' też nie jest do końca poprawny .
  • Możesz użyć narzędzia checkbashisms , aby sprawdzić, czy Twój skrypt jest zgodny z POSIX.

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.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *