komut satırı terminolojisi: komutun bu kısımları nelerdir?


21

Komut satırında genellikle "basit" komutları kullanırım.

mv foo/bar baz/bar

ama bunun tüm kısımlarını ne arayacağımı bilmiyorum:

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

Ben (sanırım) 1'in bir komut olduğunu ve 2'nin bir argüman olduğunu biliyorum ve muhtemelen 3'ü bir argüman listesi olarak adlandırırım (bu doğru mu?).

Ancak, ne arayacağımı bilmiyorum 4 .

Daha karmaşık "komutlar" nasıl etiketlenir?

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

Neyin 1,2,3,4 olarak adlandırılacağını ve yukarıdaki bu "komut" un her bir parçasını neyin arayacağına cevap veren bir cevabı takdir ediyorum.

Buraya dahil etmediğim benzersiz / şaşırtıcı başka şeyler de öğrenmek harika olurdu.


1
Özet bölümünün mansayfalarına gitve findözellikle özet bölümlerine baktınız mı ?
fpmurphy

4
Eğer Git için man sayfaları baktı mı ve bulmak soru ile ilgisi görünüyor Yani gitya findlinux için oldukça genel terminolojiyi.
Att Righ

Vurup kırmak adam sayfasına göre A | B, A | Bbir olan boru hattı , Ave Bolan komutlar (bunun bir komutla sadece ilk dünya olarak aynı ada sahip olduğunu talihsiz). İlk argümanı çalıştırılabilir olarak adlandırabilirim ama benimle aynı fikirde olan bir kaynak bulamıyorum.
Att

4
Bağlamında git checkout ..., checkouta, alt komutu ve bağlamında sh -c ...,-c bir olan seçenek .
wjandrea

@JoL bunu gösterdiğiniz için teşekkürler. Doğru tahmin ettin, ben bunu düzenledim. Çünkü bu bölümü doğru şekilde yapmaya çalıştığımdan 4 kez tekrar yazdım
10

Yanıtlar:


33

Her bölüm için ortak adlar aşağıdaki gibidir:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘
  1. Komut adı (yönlendirme veya değişken ataması olmayan ve diğer adların genişletildikten sonra komut satırının ilk sözcüğü veya belirteci).

  2. Komutun belirteci, sözcüğü veya argümanı. Adam bash'tan:

    kelime: Kabuk tarafından tek bir birim olarak kabul edilen bir karakter dizisi. Bir simge olarak da bilinir.

  3. Genellikle: Argümanlar

  4. Komut satırı.

İki basit komutun a ile birleştirilmesi |bir boru dizisi veya boru hattıdır:

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

Yönlendirme ve değişken atamalarının da olduğunu unutmayın:

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

Nerede (yukarıdan gelen sayıların yanında):

  1. yönlendirme.
  2. Değişken ödev
  3. Basit komut

Bu, bir komut satırının sahip olabileceği tüm öğelerin ayrıntılı bir listesi değildir. Böyle bir liste bu kısa cevap için çok karmaşık.


2
POSIX terminolojisinde, boru dediğiniz şey bir boru dizisi veya boru hattıdır (bir boru hattının !durumunu olumsuzlamak için isteğe bağlı bir yol açabilir). boru , boru hatlarını uygulamak için çoğu kabuk tarafından kullanılan IPC mekanizmasını ifade eder (boru hatları boru kullanmak zorunda değildir, ksh93, örneğin bazı sistemler yerine soket çiftleri kullanır). Bazı kabuklar gibi daha fazla anahtar kelime var time, noglobbunun yerine veya buna ek olarak kullanılabilir !burada.
Stéphane Chazelas,

1
IMHO, bunlara argümanlar denir - başka hiçbir şey bu yüzden bu bağlamda belirteci kelimesinin "bash'ın gramerinin atomik birimi" anlamına geldiğini düşünüyorum. Burada token terimi , programın yürütme bağlamında değil, yalnızca kabuk komut satırı bağlamında bulunur. "Bunlar programlar belirteçleri" demek biraz garip ama "komut satırındaki ikinci belirteç $ test" demek daha az garip. Bir ayrım ortaya çıkıyor cat $file, burada $filebir belirteç olduğunu söyleyebilirim , ancak dosyanın değeri argümandır.
Att Righ

1
@PeterCordes Haklısın, <<< "…" bir yeniden yönlendirme, tartışma değil. Yine de çizginin bir işaretidir. Karışıklık için özür dilerim.
Isaac

1
@TOOGAM Bunlar standart tanımların tam tersidir. Arayanın sağladığı şeyler argümanlardır; bakınız “Biçimsel parametre” veya bu SO sorusu .
Michael Homer,

1
@TOOGAM " Gördüğüm parametreler" . Hmm bence haklısın. POSIX belirtimine göre: "Kabuk bir işlevi yürütür (bkz. İşlev Tanımı Komutu), yerleşik (bkz. Özel Dahili Yardımcı Programlar), çalıştırılabilir dosya veya komut dosyası, argümanların adlarını 1 ile n arasındaki konumsal parametreler olarak verir, ve komutun adı (veya bir komut dosyasındaki bir işlev durumunda, komut dosyasının adı) 0 numaralı konumsal parametre olarak (bkz. Komut Arama ve Yürütme). " ve bütün bu yıllar boyunca yanılmışım ... Savunmamda buna rağmen, deniyorargv
Att Righ

15

@ Isaacac'ın yukarıdaki cevabı iyi görünüyor.

Bunu bazı kaynaklarla genişletmek istiyorum.

Sanırım POSIX standardı bazı anlamda kudreti düşünülebilir kanonik . Diğer kaynaklar olabilir man bashve man proc.

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

POSIX şunu önermektedir:

  1. komut adı (daha doğrusu komutu yerine, hatta bu belge kullandığı yerlerde komutunu rağmen)
  2. tartışma
  3. Argümanlar
  4. Komut (yine man procde komut satırını kullanır )

Ayrıca birçok daha karmaşık komut için terminolojiye sahiptir.

Komutun oldukça belirsiz olduğunu düşünüyorum, bu yüzden belki komut adı ve komut satırı terimleri netlik için iyidir.


Proc nedir? Bunu hiç duymamıştım.
theonlygusti


5
+1 Bu cevabı en çok sevdim. (Bu özel bağlamda, 2 bir alt komuttur , ancak genellikle evet, bir argümandır).
kubanczyk

@ theonlygusti proc, çekirdeğin iç durumu hakkında bilgi sağlayan özel bir dosya sistemidir (dosya toplama). Bunun süreçler anlamına geldiğine inanıyorum (ayrıca bkz. Sysfs süreçlerden başka şeyler hakkında bilgi sağlayan ). İlgili olmasının nedeni çekirdek geliştiricileri tarafından yazılmıştır , bu nedenle kullandıkları dili biraz daha resmi olabilecek şekilde yansıtabilir.
Att Righ,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.