GNU/Linux >> Linux Esercitazione >  >> Linux

Cosa significa l'ultimo - (trattino) nelle opzioni di `bash`?

Bash si comporta in modo alquanto non standard quando si tratta di - .

POSIX dice:

Orientamento 10:
Il primo -- argomento che non è un argomento di opzione dovrebbe essere accettato come delimitatore che indica la fine delle opzioni. Tutti gli argomenti successivi devono essere trattati come operandi, anche se iniziano con - carattere.

[…]

Orientamento 13:
Per le utilità che usano gli operandi per rappresentare i file da aprire per la lettura o la scrittura, il - operando dovrebbe essere usato per indicare solo input standard (o output standard quando è chiaro dal contesto che è stato specificato un file di output) o un file chiamato - .

E

Quando un'utilità descritta nel volume Shell and Utilities di POSIX.1-2017 come conforme a queste linee guida è tenuta ad accettare o non accettare l'operando - per indicare input o output standard, questo utilizzo è spiegato nella sezione OPERANDI. Altrimenti, se tale utilità utilizza gli operandi per rappresentare i file, è definito dall'implementazione se l'operando - sta per standard input (o standard output), o per un file chiamato - .

Ma poi man 1 bash recita:

Un -- segnala la fine delle opzioni e disabilita l'ulteriore elaborazione delle opzioni. Qualsiasi argomento dopo -- vengono trattati come nomi di file e argomenti. Un argomento di - equivale a -- .

Quindi per Bash - non significa né input standard né file, quindi in qualche modo non standard.

Ora il tuo caso particolare:

curl -sL https://rpm.nodesource.com/setup_6.x | sudo -E bash -

sospetto l'autore di questo comando potrebbe non realizzare - equivale a -- in questo caso. sospetto l'autore voleva assicurarsi che bash leggerà dal suo input standard, si aspettavano - lavorare secondo la linea guida 13.

Ma anche se funzionasse secondo le linee guida, - non sarebbe necessario qui perché bash rileva quando il suo input standard è una pipe e agisce di conseguenza (a meno che -c è dato ecc.).

Ancora - non funziona secondo le linee guida, funziona come -- . Ancora -- non è necessario qui perché non ci sono argomenti dopo di esso.

Secondo me l'ultimo - non cambia nulla. Il comando funzionerebbe senza di esso.

Per vedere come -- e - può essere utile in generale, studia l'esempio qui sotto.

cat nel mio Kubuntu obbedisce a entrambe le linee guida e lo userò per dimostrare l'utilità di - e -- .

Lascia un file chiamato foo esistere. Questo stamperà il file:

cat foo

Lascia un file chiamato --help esistere. Questo non stamperà il file:

cat --help

Ma questo stamperà il file chiamato --help :

cat -- --help

Questo concatenerà il file chiamato --help con tutto ciò che proviene dallo standard input:

cat -- --help -

Sembra che tu non abbia davvero bisogno di -- , perché puoi sempre superare ./--help che sarà interpretato come un file di sicuro. Ma considera

cat "$file"

quando non sai in anticipo quale sia il contenuto della variabile. Non puoi semplicemente anteporre ./ ad esso, perché potrebbe essere un percorso assoluto e ./ lo spezzerebbe. D'altra parte potrebbe essere un file chiamato --help (perché perché no?). In questo caso -- è molto utile; questo è un comando molto più robusto:

cat -- "$file"

In man bash , alla fine delle opzioni a carattere singolo c'è:-

--    A -- signals the end of options and disables further option processing.
      Any arguments after the -- are treated as filenames and arguments. An
      argument of - is equivalent to --.

Se hai citato il comando completo, non vedo alcun motivo per utilizzare - dopo bash in questo caso, ma non nuoce.


Linux
  1. Cosa significa "-" (doppio trattino)?

  2. Cosa significa la Tilde (~) alla fine di un nome file??

  3. Cosa significa e commerciale alla fine di una riga di script di shell?

  4. Cosa significa nell'output di Ps?

  5. Cosa significa opt (come nella directory opt)? È un'abbreviazione?

Cosa significa la sintassi |&nel linguaggio della shell?

Cosa significa 'rc' in `.bashrc`, ecc.?

Cosa significa la lettera 'u' in /dev/urandom?

Cosa significa ./ (punto barra) in Linux?

Cosa significa la capacità ep?

Cosa significa il suffisso .d in Linux?