คำถามติดแท็ก arguments

โดยปกติแล้วอาร์กิวเมนต์จะถูกกำหนดเป็นค่าจริงที่ส่งผ่านไปยังฟังก์ชันโพรซีเดอร์หรือโปรแกรมบรรทัดคำสั่ง

2
ทำไม `sort <“ $ f1”` ชอบมากกว่า `sort - '$ f1' 'และทำไมถึงชอบมากกว่า` sort“ $ f1”'?
จาก/unix//a/458074/674 จำไว้ว่าให้ใช้-- เมื่อส่งอาร์กิวเมนต์ไปยังคำสั่งโดยพลการ (หรือใช้การเปลี่ยนเส้นทางหากทำได้) ดังนั้นsort -- "$f1"หรือดีกว่าแทนsort &lt; "$f1"sort "$f1" เหตุใดจึงต้องการใช้--และเปลี่ยนเส้นทาง ทำไมถึงsort &lt; "$f1"ชอบมากกว่าsort -- "$f1"? ทำไมถึง sort -- "$f1"ชอบมากกว่าsort "$f1"? ขอบคุณ

4
ทำไมฉันต้องใช้ cd“ $ @” แทน cd“ $ 1” เมื่อเขียน wrapper สำหรับ cd?
ที่อื่นฉันได้เห็นฟังก์ชั่น cd ดังนี้ cd() { builtin cd "$@" } ทำไมมันแนะนำให้ใช้$@แทน$1? ฉันสร้างไดเรกทอรีทดสอบ "r st" และเรียกว่าสคริปต์ที่มีฟังก์ชั่นนี้และทำงานได้ทั้งสองวิธี $ . cdtest.sh "r st" แต่ $ . cdtest.sh r stล้มเหลวไม่ว่าฉันจะใช้"$@"หรือ"$1"


2
เพิ่มอาร์กิวเมนต์ให้กับ 'bash -c'
สมมติว่าฉันต้องการเรียกใช้คำสั่งผ่าน Bash ดังนี้: /bin/bash -c "ls -l" ตามหน้า Bash man ฉันก็สามารถเรียกใช้เช่นนี้: # don't process arguments after this one # | pass all unprocessed arguments to command # | | # V V /bin/bash -c ls -- -l ยกเว้นดูเหมือนว่าจะไม่ทำงาน (ดูเหมือนจะถูกละเว้น) ฉันกำลังทำอะไรผิดหรือฉันตีความหน้าคนผิดหรือเปล่า? คำพูดที่เกี่ยวข้องจากมนุษย์: หากมีอ็อพชัน -c อยู่คำสั่งจะอ่านจากสตริง หากมีข้อโต้แย้งหลังจากสตริงพวกเขาจะถูกกำหนดให้กับพารามิเตอร์ตำแหน่งเริ่มต้นด้วย $ 0 และ เอ - …

4
หา + xargs: อาร์กิวเมนต์ยาวเกินไป
ฉันมีสายเหมือนดังต่อไปนี้: find /foo/bar -name '*.mp4' -print0 | xargs -i {} -0 mv -t /some/path {} แต่ฉันได้รับข้อผิดพลาดต่อไปนี้: xargs: argument line too long ฉันสับสน. การใช้ที่xargsควรจะช่วยอย่างแม่นยำกับปัญหานี้ไม่ใช่หรือ หมายเหตุ:ฉันรู้ว่าฉันสามารถใช้เทคโนโลยี-execในการค้นหา แต่ฉันต้องการที่จะเข้าใจว่าทำไมข้างต้นล้มเหลวเนื่องจากความเข้าใจของฉันคือที่xargsควรรู้วิธีการแยกอินพุตเป็นขนาดที่จัดการได้เพื่อโต้แย้งว่ามันทำงาน สิ่งนี้ไม่จริงหรือ นี่คือทั้งหมดที่มี zsh
21 xargs  arguments 

4
ทำไมบางคำสั่งไม่อ่านจากอินพุตมาตรฐาน?
ฉันสงสัยว่าเมื่อไหร่ที่เราควรใช้ไปป์ไลน์และเมื่อใดที่เราไม่ควรทำ พูดเช่นเพื่อฆ่ากระบวนการบางอย่างที่จัดการไฟล์ pdf ข้อมูลต่อไปนี้จะไม่ทำงานโดยใช้ไปป์ไลน์: ps aux | grep pdf | awk '{print $2}'|kill แต่เราสามารถทำได้ด้วยวิธีต่อไปนี้เท่านั้น: kill $(ps aux| grep pdf| awk '{print $2}') หรือ ps aux | grep pdf | awk '{print $2}'| xargs kill อ้างอิงจากman bash(เวอร์ชั่น4.1.2): The standard output of command is connected via a pipe to the standard input …
19 shell  pipe  arguments  stdin 

4
อินพุตมาตรฐานของโปรแกรมหนึ่งสามารถส่งผ่านเป็นอาร์กิวเมนต์ไปยังโปรแกรมอื่นได้อย่างไร
สมมติว่ามีโปรแกรมอยู่ซึ่งใช้เวลาสองข้อโต้แย้ง ไฟล์อินพุตและไฟล์เอาต์พุต จะเกิดอะไรขึ้นถ้าฉันไม่ต้องการบันทึกไฟล์เอาต์พุตนี้ลงในดิสก์ แต่จะผ่านมันไปยังstdinโปรแกรมอื่นโดยตรง มีวิธีที่จะบรรลุเป้าหมายนี้หรือไม่? คำสั่งจำนวนมากที่ฉันเจอบน Linux มีตัวเลือกให้ส่งผ่าน '-' เป็นอาร์กิวเมนต์ไฟล์เอาต์พุตซึ่งทำสิ่งที่ฉันได้ระบุไว้ด้านบน เป็นเพราะการผ่านstdinโปรแกรมเป็นอาร์กิวเมนต์เป็นไปไม่ได้? ถ้าเป็นเช่นนั้นเราจะทำอย่างไร ตัวอย่างของการใช้ภาพนี้คือ: pdftotext "C BY BRIAN W KERNIGHAN &amp; DENNIS M RITCHIE.pdf" stdin(echo) เชลล์ที่ฉันใช้อยู่นั้นมันทุบตี

2
ฉันจะสตรีมข้อมูลไปยังโปรแกรมที่คาดว่าจะอ่านข้อมูลจากไฟล์ที่กำหนดเป็นอาร์กิวเมนต์ได้อย่างไร
ฉันมีไฟล์ gzipped ขนาดใหญ่และฉันต้องการโปรแกรม (4s-import ในกรณีนี้) เพื่ออ่าน ใช้เวลาในการคลายไฟล์ก่อนแล้วจึงเรียกโปรแกรมที่มีพา ธ ไปยังไฟล์เป็นอาร์กิวเมนต์ เป็นไปได้ไหมที่จะทำสิ่งที่ชอบ zcat huge.gz | 4s-import &lt;SOME MAGIC&gt; ที่ SOME-MAGIC เป็นเหมือนเส้นทางไปยังไฟล์นามธรรมที่มี stdin? ทางเลือกการใช้พื้นที่ดิสก์ที่ช้าลงและมากขึ้นที่ฉันต้องทำคือ: zcat huge.gz &gt; huger 4s-import huger

2
วิธีการวนซ้ำอาร์กิวเมนต์ในสคริปต์ทุบตี
ฉันต้องการเขียนสคริปต์ทุบตีด้วยจำนวนอาร์กิวเมนต์ที่ไม่รู้จัก ฉันจะเดินผ่านข้อโต้แย้งเหล่านี้และทำอะไรกับพวกเขาได้อย่างไร ความพยายามที่ผิดจะมีลักษณะเช่นนี้: #!/bin/bash for i in $args; do echo $i done
16 bash  shell  arguments 

2
ความแตกต่างระหว่าง STDIN และอาร์กิวเมนต์ที่ส่งผ่านไปยังคำสั่งคืออะไร
ฉันสามารถใช้ทั้งสองรูปแบบเพื่อดำเนินการcatวิธีการ: cat file_name cat &lt; file_name ผลลัพธ์จะเหมือนกัน จากนั้นฉันต้องการที่จะดำเนินการmanในรูปแบบของstdin man &lt; file_name ในขณะที่file_nameมี: # file_name cat แต่ก็ปรากฏขึ้น แทนการดำเนินการWhat manual page do you want?man cat ฉันต้องการทราบว่าทำไมcatสามารถยอมรับstdinเป็นข้อโต้แย้ง แต่manไม่สามารถ และสิ่งที่แตกต่างระหว่างอาร์กิวเมนต์บรรทัดคำสั่งและstdin?

5
ซ่อนอาร์กิวเมนต์ของโปรแกรมโดยไม่มีซอร์สโค้ด
ฉันต้องซ่อนอาร์กิวเมนต์ที่ละเอียดอ่อนบางอย่างกับโปรแกรมที่ฉันกำลังใช้งานอยู่ แต่ฉันไม่สามารถเข้าถึงซอร์สโค้ดได้ ฉันกำลังเรียกใช้สิ่งนี้บนเซิร์ฟเวอร์ที่ใช้ร่วมกันดังนั้นฉันจึงไม่สามารถใช้สิ่งที่ชอบhidepidเพราะฉันไม่มีสิทธิ์แบบ sudo นี่คือบางสิ่งที่ฉันได้ลอง: export SECRET=[my arguments]ตามด้วยการโทรศัพท์ถึง./program $SECRETแต่ดูเหมือนจะไม่ช่วย ./program `cat secret.txt`secret.txtมีการถกเถียงของฉันอยู่ที่ไหนแต่ผู้ทรงอำนาจpsสามารถดมความลับของฉันออกไปได้ มีวิธีอื่นในการซ่อนข้อโต้แย้งของฉันที่ไม่เกี่ยวข้องกับการแทรกแซงของผู้ดูแลระบบหรือไม่?
15 linux  process  ps  arguments 

4
ทำไมเสียงสะท้อนจึงไม่เรียกว่า / bin / sh -c echo foo เอาท์พุทอะไรเลย
ตัวอย่างเช่นขณะที่ใช้งานได้: $ echo foo foo สิ่งนี้ไม่: $ / bin / sh -c echo foo ในขณะที่สิ่งนี้ทำ: $ / bin / sh -c 'echo foo; echo bar ' foo บาร์ มีคำอธิบายไหม?

2
ส่งผ่านพารามิเตอร์บรรทัดคำสั่งไปยังโปรแกรมภายในเชลล์สคริปต์
ในฐานะที่เป็น./script.sh arg1 [arg2 arg3 ...]ข้อโต้แย้งบรรทัดคำสั่งarg1, arg2... สามารถได้โดย$1, $2... แต่จำนวนของการขัดแย้งจะไม่ได้รับการแก้ไข ในเชลล์สคริปต์ฉันต้องการส่งอาร์กิวเมนต์ที่เริ่มต้นจากarg2ไปยังโปรแกรม #/bin/bash ... /path/to/a/program [I want to pass arg2 arg3 ... to the program] ... ฉันจะทำอย่างไรเพราะอาจมีข้อโต้แย้งอย่างน้อยหนึ่งข้อ

3
ชื่อไฟล์ 'find -exec' pass มีช่องว่างอย่างไร
หากฉันมีไดเรกทอรีที่มีไฟล์บางไฟล์ที่ชื่อมีช่องว่างเช่น $ ls -1 dir1 file 1 file 2 file 3 ฉันสามารถคัดลอกทั้งหมดไปยังไดเรกทอรีอื่นเช่นนี้ได้สำเร็จ: $ find dir1 -mindepth 1 -exec cp -t dir2 {} + อย่างไรก็ตามการส่งออกของfind dir1 -mindepth 1มีช่องว่างที่ไม่หนี: $ find dir1 mindepth 1 dir1/file 1 dir1/file 3 dir1/file 3 หากฉันใช้print0แทนprintเอาต์พุตยังคงมีช่องว่างที่ไม่ได้ใช้ Escape: $ find dir1 mindepth 1 -print0 dir1/file 1dir1/file 2dir1/file 3 …

2
ความแตกต่างระหว่างการตั้งค่าสถานะตัวเลือกและอาร์กิวเมนต์คืออะไร [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน3 ปีที่ผ่านมา ls -a(ฉันพิจารณา-aตัวเลือก) sudo -u username( -u= ตัวเลือกusername= arg) chmod 664 my-dir( 664= ตัวเลือกmy-dir= arg) ฉันไม่สามารถนึกถึงตัวอย่างที่อาจพูดว่า "นี่คือธง" ยกเว้นบางทีเมื่อดูรายชื่อ dir: -r--------. 1 david david 3344 May 19 17:48 611056.pdf สิ่งนี้มีการตั้งค่า "อ่านธง" สำหรับเจ้าของ แต่นั่นคือทั้งหมด จะหยุดฉันไม่ให้เรียกสิ่งนั้นว่า "ตัวเลือกการอ่าน" ฉันเขียนและแก้ไขเอกสารทางเทคนิคเป็นหลักใน DocBook XML และฉันกำลังมองหาคำอธิบายของความแตกต่างซึ่งสอดคล้องและถูกต้องที่สุด อย่างไรก็ตามฉันเห็นรูปแบบการขึ้นรูปแล้ว: ธงมีแนวโน้มที่จะเป็นบูลีน เช่น,setenforce 0 ตัวเลือกช่วยกำหนดวิธีการทำงานของคำสั่ง บางคนอาจจะเป็นตัวเลือก …

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