คำศัพท์เกี่ยวกับบรรทัดคำสั่ง: ส่วนใดบ้างของคำสั่งที่เรียกว่า


21

ที่บรรทัดคำสั่งฉันมักจะใช้คำสั่ง "ง่าย" เช่น

mv foo/bar baz/bar

แต่ฉันไม่รู้ว่าจะเรียกทุกส่วนของสิ่งนี้:

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

ผม (คิดว่าฉัน) รู้ว่า1เป็นคำสั่งและ2เป็นข้อโต้แย้งและผมอาจจะเรียก3รายการอาร์กิวเมนต์ (คือว่าถูกต้องหรือไม่)

แต่ผมไม่ทราบว่าจะเรียก4

ป้ายกำกับ "คำสั่ง" ที่ซับซ้อนมากขึ้นอย่างไร

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

ฉันขอขอบคุณคำตอบที่แยกสิ่งที่จะเรียก 1,2,3,4 และสิ่งที่เรียกส่วนต่างๆของเช่น "คำสั่ง" ด้านบนนี้

มันจะเป็นการดีที่ได้เรียนรู้เกี่ยวกับสิ่งอื่น ๆ ที่ไม่เหมือนใคร / แปลกใจที่ฉันไม่ได้รวมอยู่ที่นี่


1
คุณเคยดูmanหน้าต่างๆมาgitแล้วและfindโดยเฉพาะในส่วนของบทสรุป?
fpmurphy

4
คุณเคยดู man man สำหรับ git แล้วค้นหาดังนั้นคำถามดูเหมือนจะไม่เกี่ยวข้องกับคำศัพท์ทั่วไปgitหรือfindมากกว่าสำหรับ linux
Att Righ

ตามที่หน้าคนทุบตีในA | B, A | Bเป็นท่อ , AและBมีคำสั่ง (มันโชคร้ายที่ว่านี้มีชื่อเดียวกับชื่อเพียงครั้งแรกของโลกในคำสั่ง) ฉันอาจเรียกอาร์กิวเมนต์แรกว่าสามารถเรียกทำงานได้แต่ฉันไม่พบแหล่งที่มาที่เห็นด้วย
Att Righ

4
ในบริบทของgit checkout ..., checkoutเป็นsubcommandและในบริบทของsh -c ..., -cเป็นตัวเลือก
wjandrea

@JoL ขอบคุณสำหรับการชี้ให้เห็นว่า คุณเดาถูกต้องฉันแก้ไขมันแล้ว มันเป็นเพราะผมอีกครั้งเขียนว่าบางส่วน 4 ครั้งขณะที่ผมพยายามที่จะทำมันอย่างถูกต้อง
theonlygusti

คำตอบ:


33

ชื่อสามัญสำหรับแต่ละส่วนมีดังนี้:

┌1┐ ┌──2───┐
git checkout master
│   └──────3──────┘
└───────4─────────┘
  1. ชื่อคำสั่ง (คำแรกหรือโทเค็นของบรรทัดคำสั่งที่ไม่ใช่การเปลี่ยนเส้นทางหรือการกำหนดตัวแปรและหลังจากนามแฝงได้รับการขยาย)

  2. โทเค็นคำหรืออาร์กิวเมนต์ของคำสั่ง จากคนทุบตี:

    คำ: ลำดับของอักขระที่ถือว่าเป็นหน่วยเดียวโดยเชลล์ หรือที่เรียกว่าโทเค็น

  3. โดยทั่วไป: ข้อโต้แย้ง

  4. บรรทัดคำสั่ง.

การต่อกันของสองคำสั่งง่าย ๆ ด้วย a |คือลำดับของไพพ์หรือไพพ์ไลน์:

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

โปรดทราบว่ามีการเปลี่ยนเส้นทางและการกำหนดตัวแปรด้วย:

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

ที่ไหน (ข้างๆตัวเลขจากด้านบน):

  1. การเปลี่ยนเส้นทาง
  2. การมอบหมายตัวแปร
  3. คำสั่งง่าย ๆ

นี่ไม่ใช่รายการที่น่าทึ่งขององค์ประกอบทั้งหมดที่บรรทัดคำสั่งอาจมี รายการดังกล่าวซับซ้อนเกินไปสำหรับคำตอบสั้น ๆ นี้


2
ใน POSIX ศัพท์สิ่งที่คุณเรียกท่อเป็นลำดับท่อหรือท่อ (แม้ว่าท่อสามารถมีตัวเลือกชั้นนำ!จะลบล้างสถานะของมัน) ไปป์ค่อนข้างจะอ้างถึงกลไก IPC ที่เชลล์ส่วนใหญ่ใช้ในการใช้ไพพ์ไลน์ (pipelines ไม่จำเป็นต้องใช้ไพพ์, ksh93 ใช้ socketpairs แทนในบางระบบ) เปลือกบางมีคำหลักมากขึ้นเช่นtime, noglobที่สามารถนำมาใช้แทนหรือนอกเหนือไปจาก!ที่นี่
Stéphane Chazelas

1
IMHO สิ่งเหล่านี้เรียกว่าการขัดแย้ง - ไม่มีอะไรอื่นดังนั้นฉันคิดว่าโทเค็นคำในบริบทนี้หมายถึง "หน่วยอะตอมของไวยากรณ์ของทุบตี" ที่นี่คำว่าโทเค็นมีอยู่ในบริบทของบรรทัดคำสั่งเชลล์เท่านั้นไม่ใช่ในบริบทของโปรแกรมที่เรียกใช้งาน มันอาจจะแปลกที่จะพูดว่า "นี่เป็นโทเค็นของโปรแกรม" แต่อาจจะไม่ค่อยแปลกที่จะพูดว่า "โทเค็นที่สองในบรรทัดคำสั่งคือ $ test" ความแตกต่างเกิดขึ้นcat $fileที่นี่ฉันจะบอกว่า$fileเป็นโทเค็น แต่ค่าของไฟล์เป็นอาร์กิวเมนต์
Att Righ

1
@PeterCordes คุณถูกต้อง <<< "…" เป็นการเปลี่ยนเส้นทางไม่ใช่การโต้แย้ง แม้ว่ามันจะยังคงเป็นสัญลักษณ์ของเส้น ขอโทษสำหรับความสับสน.
Isaac

1
@TOOGAM สิ่งเหล่านั้นตรงข้ามกับคำจำกัดความมาตรฐาน สิ่งที่ผู้โทรจัดเตรียมไว้ให้คือข้อโต้แย้ง cf เลย “ พารามิเตอร์ทางการ” หรือคำถาม SOนี้
Michael Homer

1
@TOOGAM "สิ่งที่ผมเห็นเป็นพารามิเตอร์" อืมฉันคิดว่าคุณพูดถูก ตามข้อมูลจำเพาะของ POSIX: "เชลล์เรียกใช้งานฟังก์ชัน (ดูคำสั่งนิยามฟังก์ชัน), ในตัว (ดูยูทิลิตี้ในตัวพิเศษ), ไฟล์เรียกทำงานหรือสคริปต์ให้ชื่อของอาร์กิวเมนต์เป็นพารามิเตอร์ตำแหน่งหมายเลข 1 ถึง n และชื่อของคำสั่ง (หรือในกรณีของฟังก์ชั่นภายในสคริปต์ชื่อของสคริปต์) เป็นพารามิเตอร์ตำแหน่งหมายเลข 0 (ดูการค้นหาคำสั่งและการดำเนินการ) และฉันผิดตลอดหลายปีที่ผ่านมา ... ถึงแม้ว่าจะมีการป้องกันตัวฉันก็จะถูกเรียกว่าargv
Att Righ

15

@ คำตอบของ isaac ข้างต้นดูเหมือนดี

ฉันต้องการขยายสิ่งนี้ด้วยบางแหล่ง

ผมคิดว่ามาตรฐาน POSIXอาจจะอยู่ในความรู้สึกบางอย่างได้รับการพิจารณาเป็นที่ยอมรับ แหล่งข้อมูลอื่น ๆ อาจจะมีและman bashman proc

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

POSIX แนะนำว่า:

  1. คือชื่อคำสั่ง (แทนที่จะเป็นคำสั่งแม้ว่าเอกสารนี้จะใช้คำสั่งแทน
  2. ข้อโต้แย้ง
  3. ข้อโต้แย้ง
  4. คำสั่ง (แม้ว่าจะman procใช้บรรทัดคำสั่ง )

นอกจากนี้ยังมีคำศัพท์สำหรับคำสั่งที่ซับซ้อนมากขึ้น

ฉันคิดว่าคำสั่งนั้นค่อนข้างคลุมเครือดังนั้นบางทีชื่อคำสั่งและบรรทัดคำสั่งนั้นดีสำหรับ clarity.j


proc คืออะไร ฉันไม่เคยได้ยินเรื่องนี้เลย
theonlygusti


5
+1 ฉันชอบคำตอบนี้ดีที่สุด (ในบริบทเฉพาะนี้2เป็นคำสั่งย่อยแต่โดยทั่วไปแล้วก็คืออาร์กิวเมนต์)
kubanczyk

@theonlygusti procเป็นระบบไฟล์วัตถุประสงค์พิเศษ (การรวบรวมไฟล์) ที่ให้ข้อมูลเกี่ยวกับสถานะภายในของเคอร์เนล ฉันเชื่อว่ามันหมายถึงกระบวนการ (ดู sysfsซึ่งให้ข้อมูลเกี่ยวกับสิ่งอื่นนอกเหนือจากกระบวนการ) เหตุผลมันมีความเกี่ยวข้องที่เขียนโดยนักพัฒนาเคอร์เนลดังนั้นอาจสะท้อนให้เห็นถึงภาษาที่พวกเขาใช้ซึ่งอาจจะเป็นเล็ก ๆ น้อย ๆ เป็นทางการมากขึ้น
Att Righ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.