terminologi baris perintah: apa yang disebut bagian ini dari perintah?

21

Di baris perintah saya sering menggunakan perintah "sederhana" seperti

mv foo/bar baz/bar

tapi saya tidak tahu harus memanggil apa semua bagian ini:

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

Saya (pikir saya) tahu bahwa 1 adalah perintah dan 2 argumen, dan saya mungkin akan menyebut 3 daftar argumen (apakah itu benar?).

Namun, saya tidak tahu harus memanggil apa 4 .

Bagaimana label "perintah" yang lebih rumit dilabeli?

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

Saya menghargai jawaban yang memecah apa yang harus dipanggil 1,2,3,4 dan apa yang harus disebut setiap bagian dari mis "perintah" di atas.

Akan sangat menyenangkan untuk belajar juga tentang hal-hal lain yang unik / mengejutkan yang belum saya masukkan di sini.

theonlygusti
sumber
1
Sudahkah Anda melihat manhalaman untuk gitdan find, khususnya bagian sinopsis?
fpmurphy
4
Pernahkah Anda melihat halaman manual untuk git dan menemukan Jadi pertanyaannya sepertinya tidak ada hubungannya dengan gitatau findlebih tepatnya terminologi umum untuk linux.
Att Righ
Menurut halaman manual bash di A | B, A | Badalah sebuah pipeline , Adan Badalah perintah (sangat disayangkan bahwa ini memiliki nama yang sama dengan hanya dunia pertama dalam suatu perintah). Saya mungkin menyebut argumen pertama sebagai executable tetapi saya tidak dapat menemukan sumber yang setuju dengan saya.
Att Righ
4
Dalam konteks git checkout ..., checkoutadalah sub- perintah , dan dalam konteks sh -c ..., -cadalah opsi .
wjandrea
@ JoL, terima kasih sudah menunjukkannya. Anda menebak dengan benar, saya sudah mengeditnya. Itu karena saya menulis ulang bagian itu sekitar 4 kali ketika saya mencoba melakukannya dengan benar
theonlygusti

Jawaban:

33

Nama umum untuk setiap bagian adalah sebagai berikut:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘
  1. Nama perintah (kata pertama atau token dari baris perintah yang bukan pengalihan atau penugasan variabel dan setelah alias telah diperluas).

  2. Token, kata, atau argumen ke perintah. Dari man bash:

    kata: Urutan karakter yang dianggap sebagai satu unit oleh shell. Juga dikenal sebagai token.

  3. Umumnya: Argumen

  4. Garis komando.

Rangkaian dua perintah sederhana dengan a |adalah urutan pipa atau pipa:

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

Pikiran bahwa ada pengalihan dan penugasan variabel juga:

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

Di mana (di samping angka-angka dari atas):

  1. pengalihan.
  2. Tugas variabel.
  3. Perintah sederhana.

Ini bukan daftar semua elemen yang bisa dimiliki oleh baris perintah. Daftar seperti itu terlalu rumit untuk jawaban singkat ini.

Ishak
sumber
2
Dalam terminologi POSIX, apa yang Anda sebut pipa adalah urutan pipa atau pipa (meskipun pipa dapat memiliki opsi opsional !untuk meniadakan statusnya). pipa lebih suka merujuk pada mekanisme IPC yang digunakan oleh kebanyakan shell untuk mengimplementasikan jaringan pipa (pipa tidak harus menggunakan pipa, ksh93 menggunakan socketpairs sebagai gantinya pada beberapa sistem misalnya). Beberapa shell memiliki lebih banyak kata kunci seperti time, noglobyang dapat digunakan sebagai gantinya atau sebagai tambahan di !sini.
Stéphane Chazelas
1
IMHO, hal-hal ini disebut argumen - tidak ada yang lain jadi saya pikir kata token dalam konteks ini berarti "unit atom tata bahasa bash". Di sini token istilah hanya ada dalam konteks baris perintah shell , bukan dalam konteks program dijalankan. Akan sedikit aneh mengatakan "ini adalah token program" tetapi mungkin kurang aneh untuk mengatakan "token kedua di baris perintah adalah $ test". Perbedaan muncul cat $file, di sini saya akan mengatakan $filetoken, tetapi nilai file adalah argumen.
Att Righ
1
@PeterCordes Anda benar, <<< "..." adalah pengalihan, bukan argumen. Padahal itu masih token of the line. Maaf bila membingungkan.
Isaac
1
@TOOGAM Itu persis berseberangan dengan definisi standar. Hal-hal yang diberikan penelepon adalah argumen; lih. "Parameter formal", atau pertanyaan SO ini .
Michael Homer
1
@TOOGAM "Yang saya lihat adalah parameter" . Hmm saya pikir kamu benar. Menurut spec POSIX: "Shell mengeksekusi suatu fungsi (lihat Perintah Definisi Fungsi), built-in (lihat Utilitas Built-In Khusus), file yang dapat dieksekusi, atau skrip, memberikan nama argumen sebagai parameter posisi bernomor 1 sampai n, dan nama perintah (atau dalam kasus fungsi dalam skrip, nama skrip) sebagai parameter posisional bernomor 0 (lihat Perintah Pencarian dan Eksekusi). " dan aku telah salah selama ini ... Meskipun dalam pembelaananku itu disebutargv
Att Righ
15

Jawaban @ isaac di atas sepertinya bagus.

Saya ingin memperluas ini dengan beberapa sumber.

Saya kira standar POSIX mungkin dalam beberapa hal dianggap kanonik . Sumber lain mungkin man bashdan man proc.

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

POSIX menyarankan bahwa:

  1. Apakah nama perintah (bukan perintah, meskipun bahkan dokumen ini menggunakan perintah di tempat)
  2. Argumen
  3. Argumen
  4. Command (meskipun man procmenggunakan baris perintah )

Ia juga memiliki terminologi untuk banyak perintah yang lebih rumit.

Saya pikir perintah cukup ambigu jadi mungkin istilah perintah dan baris perintah baik untuk kejelasan.j

Att Righ
sumber
Apa itu proc? Saya belum pernah mendengarnya.
theonlygusti
5
+1 Saya paling suka jawaban ini. (Dalam konteks spesifik ini, 2 adalah sub- perintah , tetapi umumnya ya, argumen).
kubanczyk
@theonlygusti procadalah sistem file tujuan khusus (kumpulan file) yang menyediakan informasi tentang keadaan internal kernel. Saya percaya itu adalah singkatan dari proses (lihat juga sysfs yang memberikan informasi tentang hal-hal lain selain proses). Alasannya relevan ditulis oleh pengembang kernel , jadi mungkin mencerminkan bahasa yang mereka gunakan yang mungkin sedikit lebih formal.
Att Righ