terminologia wiersza poleceń: jak nazywają się te części polecenia?

21

W wierszu poleceń często używam „prostych” poleceń, takich jak

mv foo/bar baz/bar

ale nie wiem, jak nazwać wszystkie części tego:

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

Wiem (chyba) wiem, że 1 to polecenie, a 2 to argument, i prawdopodobnie nazwałbym 3 argumentem (czy to prawda?).

Nie wiem jednak, jak zadzwonić 4 .

Jak oznaczane są bardziej złożone „polecenia”?

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

Byłbym wdzięczny za odpowiedź, która zawiera podział na to, co nazwać 1,2,3,4 i jak nazwać każdą część np. Tego „polecenia” powyżej.

Byłoby wspaniale dowiedzieć się także o innych wyjątkowych / zaskakujących rzeczach, których tutaj nie uwzględniłem.

theonlygusti
źródło
1
Czy przeglądałeś manstrony, gita findzwłaszcza sekcję streszczenia?
fpmurphy
4
Masz spojrzał na stronach manuala dla git i znaleźć Więc pytanie wydaje nic wspólnego z gitlub findraczej ogólną terminologię dla systemu Linux.
Att Righ
Według strony man bash w A | B, A | Bto rurociąg , Ai Bpolecenia (jest to niefortunne, że to ma taką samą nazwę jak tylko pierwszego świata w poleceniu). Mogę nazwać pierwszy argument plikiem wykonywalnym, ale nie mogę znaleźć źródła, które by się ze mną zgadzało.
Att Righ
4
W kontekście git checkout ..., checkoutto komenda , aw kontekście sh -c ..., -cjest to opcja .
wjandrea
@JoL dzięki za zwrócenie na to uwagi. Zgadłeś, edytowałem to. To dlatego, że napisałem tę sekcję około 4 razy, próbując to zrobić poprawnie
theonlygusti

Odpowiedzi:

33

Wspólne nazwy dla każdej części są następujące:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘
  1. Nazwa polecenia (pierwsze słowo lub token wiersza poleceń, który nie jest przekierowaniem ani przypisaniem zmiennej i po rozwinięciu aliasów).

  2. Token, słowo lub argument polecenia. From man bash:

    słowo: ciąg znaków traktowany przez powłokę jako pojedyncza jednostka. Znany również jako token.

  3. Ogólnie: Argumenty

  4. Wiersz poleceń.

Łączenie dwóch prostych poleceń za pomocą a |jest sekwencją potoku lub potokiem:

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

Pamiętaj, że istnieją również przekierowania i przypisania zmiennych:

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

Gdzie (oprócz liczb z góry):

  1. przekierowanie.
  2. Zmienne przypisanie.
  3. Proste polecenie.

To nie jest wyczerpująca lista wszystkich elementów, które może mieć wiersz poleceń. Taka lista jest zbyt skomplikowana dla tej krótkiej odpowiedzi.

Izaak
źródło
2
W terminologii POSIX, co nazywasz rury jest sekwencja rura lub rurociąg (chociaż rurociąg może mieć opcjonalny prowadzący !do zanegowania jego stan). pipe wolałby raczej odwoływać się do mechanizmu IPC używanego przez większość powłok do implementacji potoków (potoki nie muszą używać potoków, na przykład w niektórych systemach ksh93 używa par gniazd). Niektóre muszle zawierają więcej słów kluczowych time, noglobktórych można użyć zamiast lub dodatkowo !tutaj.
Stéphane Chazelas
1
IMHO, te rzeczy nazywane są argumentami - nic więcej, więc myślę, że słowo token w tym kontekście oznacza „jednostkę atomową gramatyki basha”. Tutaj termin token istnieje tylko w kontekście wiersza poleceń powłoki , a nie w kontekście wykonywania programu. Dziwnie byłoby powiedzieć „są to tokeny programów”, ale być może mniej dziwne jest powiedzieć „drugi token w wierszu poleceń to $ test”. Pojawia się rozróżnienie cat $file, tutaj powiedziałbym, że $filejest tokenem, ale wartością pliku jest argument.
Att Righ
1
@PeterCordes Masz rację, <<< „…” jest przekierowaniem, a nie argumentem. Chociaż wciąż jest to symbol linii. Przepraszam za zamieszanie.
Izaak
1
@TOOGAM Są one dokładnie przeciwne do standardowych definicji. To, co wywołujący udostępnia, to argumenty; por. „Parametr formalny” lub to pytanie SO .
Michael Homer
1
@TOOGAM „Widzę parametry” . Hmm, myślę, że masz rację. Zgodnie ze specyfikacją POSIX: „Powłoka wykonuje funkcję (patrz Polecenie definicji funkcji), wbudowaną (patrz Specjalne narzędzia wbudowane), plik wykonywalny lub skrypt, podając nazwy argumentów jako parametry pozycyjne ponumerowane od 1 do n, oraz nazwa polecenia (lub, w przypadku funkcji w skrypcie, nazwa skryptu) jako parametr pozycyjny o numerze 0 (patrz Wyszukiwanie i wykonywanie poleceń). ” i myliłem się przez te wszystkie lata ... Chociaż w mojej obronie nazywa się toargv
Att Righ
15

Powyższa odpowiedź @ isaac wydaje się dobra.

Chcę to rozszerzyć o niektóre źródła.

Myślę, że standard POSIX może w pewnym sensie być uznany za kanoniczny . Inne źródła mogą być man bashi man proc.

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

POSIX sugeruje, że:

  1. Jest nazwą polecenia (a nie polecenia, chociaż nawet ten dokument używa poleceń w niektórych miejscach)
  2. Argument
  3. Argumenty
  4. Polecenie (chociaż man procużywa wiersza polecenia )

Ma także terminologię dotyczącą wielu bardziej skomplikowanych poleceń.

Myślę, że polecenie jest dość dwuznaczne, więc być może termin nazwa polecenia i wiersz polecenia są dobre dla clarity.j

Att Righ
źródło
Co to jest proc? Nigdy o tym nie słyszałem.
theonlygusti
5
+1 Najbardziej podoba mi się ta odpowiedź. (W tym konkretnym kontekście 2 jest podkomendą , ale generalnie tak, argumentem).
kubańczyk
@theonlygusti procto system plików specjalnego przeznaczenia (zbiór plików), który dostarcza informacji o stanie wewnętrznym jądra. Wierzę, że oznacza procesy (patrz także sysfs, który dostarcza informacji o rzeczach innych niż procesy). Powód, dla którego jest odpowiedni, został napisany przez programistów jądra , więc może dobrze odzwierciedlać używany przez nich język, który może być nieco bardziej formalny.
Att Righ