มีทั้งหมดกี่วิธีในการป้อนคำสั่งด้วยอินพุต?


9

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

วิธีที่ฉันรู้:

ท่อ:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

จากแป้นพิมพ์ด้วยสัญญาณสิ้นสุดไฟล์:

sort
>gurken
>zucker
>braunkohle

จากไฟล์:

sort foo

สตริงที่นี่ (เรียกว่าเอกสาร HERE):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

ทั้งหมดนี้หรือมีวิธีทำมากกว่านี้ทำไมถึงมีวิธีที่แตกต่างกันทำไมบางวิธีจึงซ้ำซ้อน?

คำตอบ:


9

อย่างน้อยดังต่อไปนี้:

  1. ตัวเลือกคำสั่ง: foo --bar

  2. อินพุตมาตรฐาน: foo | barหรือbar < foo

  3. ไฟล์: foo *.*(หรือโดยการเปิดไฟล์ผ่านรหัสในfoo) †

  4. การส่งออกสิ่งแวดล้อม: export foo=bar; baz

  5. สภาพแวดล้อม (ไม่ส่งออก): foo=bar bazหรือenv foo=bar baz

  6. ที่นี่ doc: foo << EOF bar EOF

  7. ที่นี่สตริง: foo <<< bar

  8. สัญญาณ kill -SIGUSR1 $procid

  9. ความหลากหลายของการสื่อสารระหว่างกระบวนการเช่นซ็อกเก็ต, TCP, ไฟล์ที่แม็พหน่วยความจำ

†ใช่ฉันรู้ว่า stdin เป็นไฟล์ (หรือคล้ายไฟล์) และการส่งผ่านไฟล์อย่างนี้ก็เหมือนกับการส่งผ่านตัวเลือก


1
คุณอาจเพิ่มfoo < barเป็นตัวแปรเพิ่มเติม (ไฟล์ผ่าน stdin)
Hagen von Eitzen

14

เพื่อเริ่มต้นด้วยsort << HEREและอื่น ๆ ไม่ใช่ที่นี่สตริง นี่คือเอกสารที่นี่ สตริงที่นี่ใช้<<<โอเปอเรเตอร์ ที่อยู่ในทุบตี (และเปลือกหอยอื่น ๆ )

โดยทั่วไปมีสองวิธี หนึ่งคือผ่านอินพุตมาตรฐาน (และเปลี่ยนเส้นทาง) และอื่น ๆ ผ่านพารามิเตอร์

  1. อินพุตมาตรฐานและการเปลี่ยนเส้นทาง

    นี่คือกระแสที่ตามค่าเริ่มต้นเชื่อมต่อกับเทอร์มินัลซึ่งคำสั่งดำเนินการและเชื่อมโยงกับ fd (file descriptor) 1. มันเป็นฟีดอะไรก็ตามที่พิมพ์ไปยังเทอร์มินัล แม้ว่ามัน (อินพุต) สามารถเปลี่ยนเส้นทางในการใช้ไปป์|หรือใช้ที่นี่ - เอกสารหรือที่นี่ - สตริง จากนั้นอินพุตไม่ได้มาจากเทอร์มินัล แต่เชื่อมต่อกับเอาต์พุตมาตรฐานของคำสั่งก่อนหน้าไพพ์ เชลล์ที่ต่างกันมีการเปลี่ยนเส้นทางที่แตกต่างกันดังนั้นสำหรับหมวดนี้คุณควรตรวจสอบเอกสารของเชลล์ ค้นหาการเปลี่ยนเส้นทางอินพุต

  2. พารามิเตอร์

    sort fooนี่คือสิ่งที่ในตัวอย่างของคุณคือ การเรียกโปรแกรมหรือฟังก์ชั่นที่คุณผ่านพารามิเตอร์อย่างน้อยหนึ่งพารามิเตอร์ ไฟล์ในเครื่องเป็นไปได้เพียงอย่างเดียว พารามิเตอร์อาจมี URL หรืออะไรก็ตาม ตัวเลือกที่นี่ไม่มีที่สิ้นสุด

ในการสรุปมีวิธีทั่วไปสองวิธี:

  • นามธรรมแรกจากตรรกะภายในของแอปพลิเคชันและปรับเปลี่ยนอินพุตมาตรฐานในระดับ OS / shell

  • ในขณะที่ส่วนที่สองเกี่ยวข้องกับอวัยวะภายในของแอปพลิเคชันและเป็นสิ่งที่มีความเป็นไปได้ไม่ จำกัด โดยพิจารณาจากพารามิเตอร์การโทรเป็นอินเทอร์เฟซ

สำหรับทั้งสองวิธีคำตอบคือไม่มีข้อ จำกัด แม้ว่าข้อ จำกัด ที่แท้จริงนั้นมาพร้อมกับ OS / เชลล์และแอปพลิเคชันเอง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.