terminologie en ligne de commande: comment s'appellent ces parties d'une commande?

21

Sur la ligne de commande, j'utilise souvent des commandes "simples" comme

mv foo/bar baz/bar

mais je ne sais pas comment appeler toutes les parties de ceci:

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

Je (pense que je sais) que 1 est une commande et 2 est un argument, et j'appellerais probablement 3 une liste d'arguments (est-ce exact?).

Cependant, je ne sais pas quoi appeler 4 .

Comment les «commandes» plus complexes sont-elles étiquetées?

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

J'apprécierais une réponse qui décompose ce qu'il faut appeler 1,2,3,4 et ce qu'il faut appeler chaque partie de par exemple cette "commande" ci-dessus.

Ce serait formidable d'apprendre également d'autres choses uniques / surprenantes que je n'ai pas incluses ici.

theonlygusti
la source
1
Avez-vous consulté les manpages gitet find, en particulier, la section synopsis?
fpmurphy
4
Avez-vous regardé les pages de manuel de git et trouvé La question ne semble donc pas avoir de rapport avec gitou findplutôt une terminologie générale pour linux.
Att Righ
Selon la page de manuel bash dans A | B, A | Best un pipeline , Aet Bsont des commandes (il est regrettable que cela ait le même nom que le premier monde d'une commande). Je pourrais appeler le premier argument un exécutable mais je ne trouve pas de source qui soit d'accord avec moi.
Att Righ
4
Dans le contexte de git checkout ..., checkoutest une sous - commande , et dans le contexte de sh -c ..., -cest une option .
wjandrea
@JoL merci de l'avoir signalé. Vous l'avez deviné, j'ai édité ça. C'est parce que j'ai réécrit cette section environ 4 fois alors que j'essayais de le faire correctement
theonlygusti

Réponses:

33

Les noms communs pour chaque pièce sont les suivants:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘
  1. Nom de la commande (premier mot ou jeton de ligne de commande qui n'est pas une redirection ou une affectation de variable et après que les alias ont été développés).

  2. Jeton, mot ou argument de la commande. De l'homme bash:

    mot: une séquence de caractères considérée comme une seule unité par le shell. Également connu sous le nom de jeton.

  3. Généralement: arguments

  4. Ligne de commande.

La concaténation de deux commandes simples avec un |est une séquence de tuyaux ou un 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─────────────────────────────────────┘

N'oubliez pas qu'il existe également des redirection et des affectations de variables:

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

Où (à côté des chiffres ci-dessus):

  1. redirection.
  2. Affectation variable.
  3. Commande simple.

Ce n'est pas une liste exaustive de tous les éléments qu'une ligne de commande pourrait avoir. Une telle liste est trop complexe pour cette courte réponse.

Isaac
la source
2
Dans la terminologie POSIX, ce que vous appelez pipe est une séquence de tubes ou un pipeline (bien qu'un pipeline puisse avoir un conduit facultatif !pour annuler son état). pipe ferait plutôt référence au mécanisme IPC utilisé par la plupart des shells pour implémenter des pipelines (les pipelines n'ont pas à utiliser de tuyaux, ksh93 utilise des paires de sockets à la place sur certains systèmes par exemple). Certains shells ont plus de mots-clés comme time, noglobqui peuvent être utilisés à la place ou en plus !ici.
Stéphane Chazelas
1
À mon humble avis, ces choses sont appelées arguments - rien d'autre, donc je pense que le mot jeton dans ce contexte signifie "unité atomique de la grammaire de bash". Ici, le terme jeton n'existe que dans le contexte de la ligne de commande du shell , pas dans le contexte de l'exécution du programme. Ce serait un peu bizarre de dire "ce sont les jetons de programmes" mais peut-être moins étrange de dire "le deuxième jeton de la ligne de commande est $ test". Une distinction apparaît cat $file, je dirais ici que $filec'est un jeton, mais la valeur du fichier est l'argument.
Att Righ
1
@PeterCordes Vous avez raison, <<< "…" est une redirection, pas un argument. Bien que ce soit toujours un signe de la ligne. Désolé pour la confusion.
Isaac
1
@TOOGAM Celles-ci sont exactement opposées aux définitions standard. Les éléments fournis par l'appelant sont des arguments; cf. «Paramètre formel», ou cette question SO .
Michael Homer du
1
@TOOGAM "Ce que je vois, ce sont des paramètres" . Hmm je pense que vous avez raison. Selon la spécification POSIX: "Le shell exécute une fonction (voir Commande de définition de fonction), intégrée (voir Utilitaires intégrés spéciaux), un fichier exécutable ou un script, donnant les noms des arguments sous forme de paramètres positionnels numérotés de 1 à n, et le nom de la commande (ou dans le cas d'une fonction dans un script, le nom du script) comme paramètre positionnel numéroté 0 (voir Recherche et exécution de commandes). " et j'avais eu tort toutes ces années ... Bien que pour ma défense ça s'appelleargv
Att Righ
15

La réponse de @ isaac ci-dessus semble bonne.

Je veux étendre cela avec quelques sources.

Je suppose que la norme POSIX pourrait dans un certain sens être considérée comme canonique . D'autres sources pourraient être man bashet man proc.

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

POSIX suggère que:

  1. Est le nom de la commande (plutôt que la commande, même si ce document utilise la commande à certains endroits)
  2. Argument
  3. Arguments
  4. Commande (mais man procutilise la ligne de commande )

Il a également une terminologie pour de nombreuses commandes plus compliquées.

Je pense que la commande est assez ambiguë, alors peut-être que le terme nom de commande et ligne de commande sont bons pour la clarté.j

Att Righ
la source
Quel est proc? Je n'ai jamais entendu ça.
theonlygusti
5
+1 J'aime mieux cette réponse. (Dans ce contexte spécifique, 2 est une sous - commande , mais généralement oui, un argument).
kubanczyk
@theonlygusti procest un système de fichiers à usage spécial (collection de fichiers) qui fournit des informations sur l'état interne du noyau. Je crois qu'il représente des processus (voir aussi sysfs qui fournit des informations sur d'autres choses que les processus). La raison pour laquelle elle est pertinente est écrite par les développeurs du noyau , donc peut bien refléter le langage qu'ils utilisent, qui pourrait être un peu plus formel.
Att Righ