Voglio chiamare/bin/sh, e usare l'opzione -c per passare il comando '+ x' , cioè, per eseguire un programma chiamato '+ x', il cui nome inizia con un segno più.Gestione di '-' in argomenti di/bin/sh: POSIX vs implementazioni di Bash/Dash/FreeBSD's sh
Poiché '+ x' è interpretato da/bin/sh come opzione (in particolare, disabilitare l'opzione 'x'),/bin/sh deve essere impedito dall'interpretarlo come opzione. Ottengo i seguenti risultati diversi a seconda del/bin/sh che uso:
(1) prima variante:
/bin/sh -c -- +x
Utilizzando Dash e Bash su Linux: viene eseguito il comando + x.
Utilizzo di FreeBSD's sh: il comando - viene eseguito e viene impostata l'opzione + x.
(2) Seconda variante:
/bin/sh -c +x
Utilizzando Dash e Bash su Linux: Il + x opzione è impostata, e non v'è un errore perché l'opzione -c manca un argomento.
Utilizzo di FreeBSD's sh: il comando + x viene eseguito.
(3) terza variante:
/bin/sh -c - +x
Utilizzando Dash e Bash su Linux: + x viene eseguito.
Utilizzo di FreeBSD's sh: Il comando - viene eseguito e l'opzione + x è impostata.
(4) quarta variante: (aggiunto come suggerito nei commenti)
/bin/sh -c+x
Utilizzando Dash e Bash su Linux: Opzione non valida/non valida '+'
Utilizzando sh di FreeBSD: Bad -c opzione
La mia domanda: cosa prescrive POSIX?
sto leggendo le specifiche POSIX per sh qui: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html
Citando da esso: ". Un singolo trattino deve essere trattato come primo operando e poi ignorato Se entrambi '-' e '-' sono dati come argomenti, o se altri operandi precedono il trattino singolo, i risultati non sono definiti. "
Non sono sicuro che questa citazione si applica anche a un trattino collocato subito dopo "-c".
Quindi, quale è giusto, Dash/Bash o FreeBSD? Oppure, se entrambi hanno ragione perché POSIX consente entrambi, come farlo in modo portabile?
Per buona misura: cosa fa '/ bin/sh -c + x'? –
@ vescovo Non la penso così. '/ bin/sh' vedrà solo gli argomenti' -c' e '+ x', quindi' getopt() 'dovrebbe trattarlo come'/bin/sh -c + x'. –
Il riferimento POSIX per 'sh' è qui: http://pubs.opengroup.org/onlinepubs/9699919799/utilities/sh.html –