terminologia della riga di comando: come si chiamano queste parti di un comando?


21

Alla riga di comando uso spesso comandi "semplici" come

mv foo/bar baz/bar

ma non so come chiamare tutte le parti di questo:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘

Io (penso di) sapere che 1 è un comando e 2 è un argomento, e probabilmente chiamerei 3 un elenco di argomenti (è corretto?).

Tuttavia, non so come chiamare 4 .

Come vengono etichettati "comandi" più complessi?

find transcripts/?.? -name '*.txt' | parallel -- sh -c 'echo $1 $2' {} {/}

Gradirei una risposta che analizza come chiamare 1,2,3,4 e come chiamare ciascuna parte, ad esempio, di questo "comando" sopra.

Sarebbe bello imparare anche su altre cose uniche / sorprendenti che non ho incluso qui.


1
Hai consultato le manpagine per gite find, in particolare, la sezione sinossi?
fpmurphy

4
Hai guardato le pagine man di git e trovare così la questione sembra nulla a che fare con gito findla terminologia piuttosto generica per Linux.
Att Righ,

Secondo la pagina man bash in A | B, A | Bè un gasdotto , Ae Bsono i comandi (E 'un peccato che questo ha lo stesso nome come solo il primo mondo in un comando). Potrei chiamare il primo argomento un eseguibile ma non riesco a trovare una fonte che sia d'accordo con me.
Att Righ

4
Nel contesto di git checkout ..., checkoutè un sottocomando e nel contesto di sh -c ...,-c è un'opzione .
wjandrea,

@JoL grazie per averlo sottolineato. Hai indovinato, l'ho modificato. È perché ho riscritto quella sezione circa 4 volte mentre cercavo di farlo correttamente
theonlygusti

Risposte:


33

I nomi comuni per ciascuna parte sono i seguenti:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘
  1. Nome del comando (prima parola o token della riga di comando che non è un reindirizzamento o assegnazione di variabili e dopo che gli alias sono stati espansi).

  2. Token, parola o argomento del comando. Da man bash:

    parola: una sequenza di caratteri considerata come una singola unità dalla shell. Conosciuto anche come token.

  3. Generalmente: argomenti

  4. Riga di comando.

La concatenazione di due semplici comandi con a |è una sequenza di pipe o pipeline:

┌─1┐ ┌──────2──────┐ ┌─2─┐ ┌──2──┐   ┌──1───┐ ┌2┐┌2┐┌2┐┌────2─────┐ ┌2┐ ┌2┐
find transcripts/?.? -name '*.txt' | parallel -- sh -c 'echo $1 $2'  {} {/}
│    └────────────3──────────────┘            └────────────3──────────────┘
└───────────────────────────────────4─────────────────────────────────────┘

Ricorda che ci sono anche reindirizzamenti e assegnazioni variabili:

┌──5──┐ ┌1┐ ┌─2─┐ ┌─2─┐   ┌───6──┐ ┌1┐ ┌─5─┐
<infile tee file1 file2 | LC_ALL=C cat >file
└─────────7───────────┘   └───────7────────┘
└─────────────────────4────────────────────┘

Dove (accanto ai numeri dall'alto):

  1. reindirizzamento.
  2. Assegnazione variabile.
  3. Comando semplice.

Questo non è un elenco esaustivo di tutti gli elementi che una riga di comando potrebbe avere. Tale elenco è troppo complesso per questa breve risposta.


2
Nella terminologia POSIX, ciò che si chiama pipe è una sequenza di pipe o pipeline (anche se una pipeline può avere un'opzione facoltativa che ne !nega lo stato). pipe farebbe piuttosto riferimento al meccanismo IPC utilizzato dalla maggior parte delle shell per implementare pipeline (le pipeline non devono usare pipe, ad esempio ksh93 usa socketpairs su alcuni sistemi). Alcune shell hanno più parole chiave come time, noglobche possono essere utilizzate al posto o in aggiunta a !qui.
Stéphane Chazelas,

1
IMHO, queste cose sono chiamate argomenti - nient'altro, quindi penso che la parola token in questo contesto significhi "unità atomica della grammatica di Bash". Qui il termine token esiste solo nel contesto della riga di comando della shell , non nel contesto del programma eseguito. Sarebbe un po 'strano dire "questi sono i token dei programmi" ma forse meno strano dire "il secondo token nella riga di comando è $ test". Viene fatta una distinzione cat $file, qui direi che $fileè un token, ma il valore di file è l'argomento.
Att Righ,

1
@PeterCordes Hai ragione, <<< "..." è un reindirizzamento, non un argomento. Anche se è ancora un segno della linea. Dispiace per la confusione.
Isaac,

1
@TOOGAM Questi sono esattamente opposti alle definizioni standard. Le cose fornite dal chiamante sono argomenti; cf. "Parametro formale", o questa domanda SO .
Michael Homer,

1
@TOOGAM "Quello che vedo sono parametri" . Hmm penso che tu abbia ragione. Secondo le specifiche POSIX: "La shell esegue una funzione (vedi Comando definizione funzione), integrata (vedi Utilità integrate speciali), file eseguibile o script, dando i nomi degli argomenti come parametri posizionali numerati da 1 a n, e il nome del comando (o nel caso di una funzione all'interno di uno script, il nome dello script) come parametro posizionale numerato 0 (vedere Ricerca ed esecuzione dei comandi). " e mi ero sbagliato in tutti questi anni ... Anche se a mia difesa si chiamaargv
Att Righ

15

La risposta di @ isaac sembra buona.

Voglio estenderlo con alcune fonti.

Immagino che lo standard POSIX potrebbe in qualche modo essere considerato canonico . Altre fonti potrebbero essere man bashe man proc.

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘

POSIX suggerisce che:

  1. È il nome del comando (piuttosto che il comando, anche se anche questo documento usa il comando in alcuni punti)
  2. Discussione
  3. argomenti
  4. Comando (sebbene man procutilizzi la riga di comando )

Ha anche una terminologia per molti comandi più complicati.

Penso che il comando sia piuttosto ambiguo, quindi forse il termine nome comando e riga comandi sono utili per chiarezza


Che cos'è proc? Non ne ho mai sentito parlare.
theonlygusti,


5
+1 Mi piace molto questa risposta. (In questo specifico contesto, 2 è un sottocomando , ma generalmente sì, un argomento).
Kubanczyk,

@theonlygusti procè un filesystem per scopi speciali (raccolta di file) che fornisce informazioni sullo stato interno del kernel. Credo che rappresenti i processi (vedi anche sysfs che fornisce informazioni su cose diverse dai processi). Il motivo per cui è rilevante è scritto dagli sviluppatori del kernel , quindi potrebbe riflettere il linguaggio che usano e che potrebbe essere un po 'più formale.
Att Righ,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.