Chcę wywołać/bin/sh i użyć opcji -c, aby przekazać polecenie "+ x" , to znaczy, aby uruchomić program o nazwie "+ x", którego nazwa zaczyna się znakiem plus.Obsługa "-" w argumentach/bin/sh: POSIX vs implementacje Bash/Dash/FreeBSD's sh
Ponieważ "+ x" jest interpretowane jako/bin/sh jako opcja (konkretnie, wyłącz opcję "x"), należy zabronić/bin/sh interpretować ją jako opcję. Mam następujące różne wyniki w zależności od/bin/sh używać:
(1) Pierwszy wariant:
/bin/sh -c -- +x
Korzystanie Dash a bash na Linux: Komenda + x jest wykonywany.
Korzystanie z funkcji FreeBSD sh: polecenie - jest wykonywane, a opcja + x jest ustawiona.
(2) Drugi wariant:
/bin/sh -c +x
Korzystanie Dash a bash na Linux: + x opcja jest ustawiona, a tam jest błąd, ponieważ opcja -c brakuje argumentu.
Korzystanie z funkcji FreeBSD: Wykonanie polecenia + x.
(3) Trzeci wariant:
/bin/sh -c - +x
Korzystanie Dash a bash na Linux: + x jest wykonywany.
Korzystanie z funkcji FreeBSD sh: polecenie - zostaje wykonane i ustawiona jest opcja + x.
(4) Czwarty wariant: (dodany jako sugerowane w komentarzach)
/bin/sh -c+x
Korzystanie Dash a bash na Linux: Nieprawidłowy/opcja nielegalne '+'
Korzystanie sh FreeBSD: Bad -c opcja
Moje pytanie: co oznacza POSIX?
Czytam specyfikacji POSIX dla sh tutaj: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
Cytując go: „. Jedna kreska powinna być traktowana jako pierwszego argumentu, a następnie ignorowane Jeśli oba«-»i«-»są podane jako argumenty lub jeśli inne operandy poprzedzają pojedynczy łącznik, wyniki są niezdefiniowane. "
Nie jestem pewien, czy ten cytat dotyczy także pojedynczego myślnika umieszczonego tuż po "-c".
Więc, który z nich ma rację, Dash/Bash lub FreeBSD? Lub, jeśli obie są słuszne, ponieważ POSIX pozwala obu, jak to zrobić przenośnie?
Dla dobra miara: co robi '/ bin/sh -c + x' –
@ Bishop Nie sądzę. '/ bin/sh' zobaczy tylko argumenty' -c' i '+ x', więc' getopt() 'powinno traktować to jako'/bin/sh -c + x'. –
Tutaj znajduje się odnośnik POSIX dla 'sh': http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html –