Czy ktoś może ustawić te narzędzia w kolejności przenośności? Która z nich jest pewne, można znaleźć na nawet najbardziej minimalne systemów uniksowych? Czy któryś z nich jest w 100% na pewno obecny? Domyślam się, że kolejność jest następująca:
- awk
- sed
- sh
- perl
Chociaż wyobrażam sobie, że istnieją systemy, które nie domyślnie używają powłoki Bourne'a, niektóre powłoki będą obecne jako domyślne, czy to zawsze będzie /bin/sh
? Prawdopodobnie nie, jeśli nie jest to skorupa typu Bourne'a. Zarówno awk
i sed
mają strony wyjaśniając je w specyfikacji POSIX tak prawdopodobnie zawsze będą obecne. Czy tak jest Czy mogę mieć pewność, że oba zostaną zainstalowane na dowolnym * nix? W tym systemy wbudowane?
posix
portability
terdon
źródło
źródło
sh
,awk
ised
na przykład i mój NAS oparty na busyboksie ma również perla.Odpowiedzi:
sed
,sh
Iawk
są przenośne jest określony przez POSIX,perl
nie jest jako nie poparta standardzie.Jeśli będziesz trzymać się zgodnego kodu, nie powinno być kolejności przenoszenia trzech poleceń POSIX.
Trzy POSIX wraz z wieloma innymi narzędziami są obowiązkowe, aby system operacyjny był POSIX. Istnieją jednak systemy operacyjne pozbawione niektórych z powodu minimalizacji lub zapewniające niepełne / niezgodne implementacje.
W rzeczywistości większość (jeśli nie wszystkie) wolne i otwarte systemy operacyjne typu Unix prawdopodobnie nie przeszłyby procesu zgodności, gdyby próbowały i nigdy nie próbują.
Byłbym zaskoczony, gdybym znalazł system operacyjny taki jak * nix bez powłoki opartej na składni Bourne'a, ale wszystko jest możliwe, szczególnie w systemach wbudowanych.
/bin/sh
prawdopodobnie jest powłoką rodziny składni Bourne'a, ale nie ma gwarancji zgodności z POSIX, nawet w systemach zgodnych z POSIX. Na przykład jest/usr/xpg4/bin/sh
on w/bin/sh
systemie Solaris 10 i starszych, podczas gdy jest starszą oryginalną powłoką Bourne'a, która nie jest POSIX.źródło
Weź przykład z Autotools: trzymaj się najniższego wspólnego mianownika powłoki Bourne'a i POSIX - być może powiększonego
sed
- jeśli musisz napisać coś, co musi działać wszędzie . Mogą istnieć systemy, w których coś się psuje, ale można obejść takie problemy, przepisując.Na przykład niektóre starożytne systemy mają problemy z błędami ekspansji
test
, czyli[
:więc praktyka Autoconf polega na przepisywaniu go w podwójnych cudzysłowach z prefiksem jednoznakowym, na przykład:
Możesz również użyć
"x$foo"
tutaj. Chroni to przed możliwością, która$foo
może być prawidłową opcjątest(1)
, a ponieważ[
jest to aliastest
, może źle interpretować wyrażenie. Rozwiązaniem jest ustawienie sytuacji, w której nieznany argument[
zawsze zaczyna się odx
, co oznacza, że nie może mieć specjalnego znaczenia[
.(Autoconf zaleca również używanie
test
zamiast[
, ale ta rada pojawia się jako reakcja na możliwe konflikty z M4 , który również używa[
swojej składni).awk jest POSIX , więc teoretycznie jest dostępny wszędzie. Jest nawet w Busybox , więc będziesz miał
awk
implementację nawet w niektórych bardzo restrykcyjnych wbudowanych systemach Linux. Mimo to, że będę mniej zaskoczony, aby natknąć się na systemie bezawk
niżsed
. Podejrzewam, że sprowadza się to do złożoności: prostsze narzędzia mają większe szanse na przetrwanie agresywnego triage.Perl nie jest częścią żadnego rozpowszechnionego standardu, POSIX lub innego, więc po prostu nie możesz na niego liczyć, jeśli nie wiesz nic o środowisku docelowym. Perl nie jest domyślnie instalowany w:
Podręcznik Autoconf zawiera rozdział dotyczący programowania przenośnych powłok, który powinien być dla ciebie pomocny. Narzędzia pokrowce Ostatnia sekcja podoba
sed
,awk
i wiele innych.źródło
sh
ised
jesteś najbardziej przenośny. OK, a co z pozostałymi? I czysh
naprawdę jest tak przenośny? Co jeśli domyślna powłoka jest pochodną powłoki C? Czy taki system nadal będzie zawierał dowiązanie symboliczne/bin/sh
?sed
iawk
dostarczonych przez Busybox, dlaczego chcesz być bardziej zaskoczony, aby znaleźćsed
nieobecny? Czy masz pomysł, czy alternatywne opcje dla busybox zapewniają także sed i awk?sed
robi mniej, więc jego plik binarny będzie mniejszy, dlatego jest mniej powodów, aby go usunąć niżawk
, co jest dość złożone. (20 kiB w porównaniu do 48 kiB w moim systemie.) Re: Alternatywy Busybox , nie znam żadnej innej alternatywy dla zakupów w jednym miejscu.sh
- dziwny, że terdon rangujeawk
ised
powyżej tego o_O?), Chociaż jest to tylko zbieżne z celami Autotool, ponieważ niektóre środowiska, szczególnie małe, może nie być przeznaczony do zabudowy, kropka./bin/sh
, to wszystko jest inne, ale nie wiedziałem, że wszyscy będą mieli. Przepraszam, że nie przyjąłem tego, byłem rozdarty między twoimi a odpowiedziami Jlliagre, które odpowiedziały na moje pytanie. Wybrałem jego, ponieważ to dotyczyło go bardziej bezpośrednio i ponieważ ma mniej przedstawicieli :).