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

เชลล์เป็นอินเตอร์เฟสบรรทัดคำสั่งของ Unix คุณสามารถพิมพ์คำสั่งในเชลล์แบบโต้ตอบหรือเขียนสคริปต์เพื่อทำงานอัตโนมัติ ใช้แท็กนี้สำหรับคำถามที่ใช้กับ / bin / sh และเชลล์ที่เข้ากันได้มากที่สุด (ash, bash, ksh, zsh, …) สำหรับเชลล์สคริปต์ที่มีข้อผิดพลาดโปรดตรวจสอบใน http://shellcheck.net ก่อนโพสต์ที่นี่

4
มีแอพพลิเคชั่นสไลด์โชว์ CLI / เทอร์มินัลไหม?
ฉันถามตัวเอง: มีลินุกซ์หรือไม่ซอฟต์แวร์ใด ๆ ที่สามารถสร้างและแสดงสไลด์อย่างง่ายบนเทอร์มินัลเช่นเดียวกับที่คุณทำบน Libreoffice Impress (แต่ง่ายกว่า)? นี่จะเป็นประสบการณ์ที่ยอดเยี่ยมในการนำเสนอโดยใช้เพียงคอนโซลโดยไม่ใช้กราฟิกขั้นสูงใด ๆ (เช่น GL และ framebuffer) อาจใช้เพียง ncurses หรือ lib อื่น ๆ เช่นนั้น ความช่วยเหลือใด ๆ แก้ไข 1:ฉันใช้และแนะนำ vimdeck ขอบคุณทุกท่าน: D แก้ไข 2:คำถามนี้ยังคงเปิดอยู่สำหรับซอฟต์แวร์แบบสแตนด์อโลนหรือปลั๊กอินใด ๆ ที่สามารถใช้ LaTeX

6
ไพพ์ไปยังหลายไฟล์ในเชลล์
ฉันมีแอปพลิเคชั่นซึ่งจะสร้างข้อมูลจำนวนมากซึ่งฉันไม่ต้องการจัดเก็บลงดิสก์ แอปพลิเคชั่นส่วนใหญ่ส่งออกข้อมูลที่ฉันไม่ต้องการใช้ แต่เป็นชุดข้อมูลที่มีประโยชน์ที่ต้องแยกเป็นไฟล์แยกต่างหาก ตัวอย่างเช่นกำหนดเอาต์พุตต่อไปนี้: JUNK JUNK JUNK JUNK A 1 JUNK B 5 C 1 JUNK ฉันสามารถเรียกใช้แอปพลิเคชันได้สามครั้งดังนี้: ./app | grep A > A.out ./app | grep B > B.out ./app | grep C > C.out นี่จะทำให้ฉันได้สิ่งที่ฉันต้องการ แต่ใช้เวลานานเกินไป ฉันไม่ต้องการดัมพ์เอาต์พุตทั้งหมดไปยังไฟล์เดียวและวิเคราะห์คำนั้น มีวิธีใดบ้างที่จะรวมการดำเนินการทั้งสามที่แสดงไว้ด้านบนในลักษณะที่ฉันจะต้องเรียกใช้แอปพลิเคชันเพียงครั้งเดียวและยังคงได้รับไฟล์เอาต์พุตสามไฟล์
29 bash  shell  grep  pipe 

6
ฉันจะสร้างนามแฝงสำหรับคำสั่ง git [action] (ซึ่งมีช่องว่าง) ได้อย่างไร
นามแฝงของฉันส่วนใหญ่เป็นของแบบฟอร์มนี้: alias p='pwd' ฉันต้องการนามแฝงgit commitเพื่อที่จะทำgit commit -v แต่การพยายามสร้างนามแฝงที่มีช่องว่างทำให้เกิดข้อผิดพลาด: $ alias 'git commit'='git commit -v' -bash: alias: `git commit': invalid alias name
29 bash  shell  terminal  alias  git 

4
ฉันจะบันทึกคำสั่งสุดท้ายไปยังไฟล์ได้อย่างไร?
เมื่อฉันใช้การวิเคราะห์โดยใช้ bash shell ฉันมักจะต้องการบันทึกคำสั่งที่ฉันใช้ซึ่งให้ผลลัพธ์ที่ดีกับไฟล์ในไดเรกทอรีเดียวกัน ("LOGBOOK" ของฉันซึ่งเรียกว่า) เพื่อให้ฉันสามารถตรวจสอบสิ่งที่ ฉันได้รับผลลัพธ์เหล่านั้น จนถึงตอนนี้มีความหมายว่าฉันทั้ง copy.pasting คำสั่งจาก terminal หรือกด "up" การปรับเปลี่ยนคำสั่งเป็นecho"my command" >> LOGBOOKหรือการแสดงตลกที่คล้ายกันอื่น ๆ ผมพบว่ามีhistoryเครื่องมือในวันอื่น ๆ getlast >> LOGBOOKแต่ฉันไม่สามารถหาวิธีการใช้มันเพื่อให้ได้คำสั่งดำเนินการก่อนหน้านี้เพื่อที่ฉันสามารถทำสิ่งที่ต้องการ มีวิธีง่าย ๆ ที่ดีในการทำเช่นนี้ หรือมิฉะนั้นคนอื่น ๆ จะจัดการกับการบันทึกคำสั่งสำหรับผลลัพธ์ที่ได้อย่างไร

3
bash คำสั่งหลายบรรทัดพร้อมกับข้อคิดเห็นหลังจากอักขระต่อเนื่อง
พิจารณา echo \ # this is a comment foo สิ่งนี้ให้: $ sh foo.sh # this is a comment foo.sh: line 2: foo: command not found หลังจากค้นหาบนเว็บฉันพบวิธีแก้ปัญหาโดย DigitalRossใน Stack Overflow ของเว็บไซต์น้อง ดังนั้นเราสามารถทำได้ echo `: this is a comment` \ foo หรืออีกวิธีหนึ่ง echo $(: this is a comment) \ foo อย่างไรก็ตาม DigitalRoss …
29 bash  shell 

1
เป็นไปได้หรือไม่ที่จะใช้ `find -exec sh -c` อย่างปลอดภัย?
ฉันพยายามที่จะใช้findเพื่อecho 0เป็นไฟล์บาง แต่เห็นได้ชัดว่านี้จะทำงานเฉพาะกับsh -c: find /proc/sys/net/ipv6 -name accept_ra -exec sh -c 'echo 0 > {}' \; แต่การใช้งานsh -cด้วยfind -execทำให้ฉันรู้สึกไม่สบายใจมากเพราะฉันสงสัยว่าจะมีปัญหาในการอ้างอิง ฉันเล่นซอกับมันและเห็นได้ชัดว่าความสงสัยของฉันถูกต้อง: การตั้งค่าการทดสอบของฉัน: martin@dogmeat ~ % cd findtest martin@dogmeat ~/findtest % echo one > file\ with\ spaces martin@dogmeat ~/findtest % echo two > file\ with\ \'single\ quotes\' martin@dogmeat ~/findtest % echo three …
29 shell  find 

3
ลำดับการเปลี่ยนเส้นทาง
ฉันไม่ค่อยเข้าใจว่าคอมพิวเตอร์อ่านคำสั่งนี้อย่างไร cat file1 file2 1> file.txt 2>&1 หากฉันเข้าใจ2>&1เพียงแค่เปลี่ยนเส้นทางข้อผิดพลาดมาตรฐานไปที่เอาต์พุตมาตรฐาน โดยตรรกะนั้นคำสั่งอ่านให้ฉันดังต่อไปนี้: ต่อไฟล์file1และfile2. ส่งจากการดำเนินการนี้stdoutfile.txt ส่งไปยังstderrstdout จบ? ฉันไม่แน่ใจว่าคอมพิวเตอร์กำลังทำอะไรอยู่ โดยตรรกะของฉันคำสั่งควรจะเป็น cat file1 file2 2>&1 > file.txt แต่สิ่งนี้ไม่ถูกต้อง

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"? ขอบคุณ

1
วิธีปิดใช้งาน“ auto cd” ใน zsh ด้วย oh-my-zsh
Googling สิ่งนี้ไม่แสดงผลลัพธ์ใด ๆ นี่คือสิ่งที่ผมหมายถึง: ฉันมีแฟ้มไบนารีชื่อxในเส้นทางของฉัน (ไม่โฟลเดอร์ปัจจุบัน แต่ก็เป็นในPATH) และยังโฟลเดอร์ที่มีชื่อเดียวกันในไดเรกทอรีที่ทำงานปัจจุบัน ถ้าฉันพิมพ์xฉันต้องการไบนารีที่จะดำเนินการ แต่แทนที่จะเป็นซีดีลงในโฟลเดอร์นั้น ฉันจะแก้ไขได้อย่างไร
29 shell  zsh  oh-my-zsh 

4
แปลงฐาน BASH จากฐานสิบเป็นฐานสิบหก
ในทุบตีวิธีการหนึ่งจะทำแปลงฐานจากทศนิยมเพื่อฐานอีกหกเหลี่ยมโดยเฉพาะอย่างยิ่ง ดูเหมือนจะเป็นวิธีที่ง่ายกว่า: $ echo $((16#55)) 85 ด้วยการค้นเว็บฉันพบสคริปต์ที่ใช้การคำนวณทางคณิตศาสตร์และตัวละครเพื่อทำการแปลงและฉันสามารถใช้มันเป็นฟังก์ชั่นได้ แต่ฉันคิดว่าทุบตีจะมีการแปลงฐานในตัวแล้ว - ทำมัน?

3
`{{(ออก 1) อะไร ทางออก 1; }; } `หมายถึงอะไร
ผมยกมาข้อมูลโค้ดต่อไปจากที่สร้างขึ้นโดยconfig.statusconfigure if test ! -f "$as_myself"; then { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" &gt;&amp;5 echo "$as_me: error: cannot find myself; rerun with an absolute path" &gt;&amp;2;} { (exit 1); exit 1; }; } fi ในข้อมูลโค้ดจะ{ (exit 1); exit 1; };ทำอย่างไร จุดประสงค์ของการทำเพียงแค่exitใน subshell คืออะไร

8
ทำไมไม่มี ";" หลังจาก "ทำ" ในลูป sh
เหตุใดจึงไม่มี;ตัวอักษรdoในเชลล์วนเมื่อเขียนในบรรทัดเดียว นี่คือสิ่งที่ฉันหมายถึง เมื่อเขียนบนหลายบรรทัดforลูปจะมีลักษณะดังนี้: $ for i in $(jot 2) &gt; do &gt; echo $i &gt; done และในบรรทัดเดียว: $ for i in $(jot 2); do echo $i; done บรรทัดที่ยุบทั้งหมดจะได้รับ;หลังจากนั้นยกเว้นสำหรับdoบรรทัดและหากคุณรวม;มันจะเป็นข้อผิดพลาด บางคนอาจเป็นคนที่ฉลาดกว่าฉันคิดว่านี่เป็นสิ่งที่ถูกต้องที่จะทำด้วยเหตุผล แต่ฉันไม่สามารถเข้าใจได้ว่าเหตุผลคืออะไร ดูเหมือนว่าจะไม่สอดคล้องกับฉัน เช่นเดียวกันกับwhileลูปเกินไป $ while something &gt; do &gt; anotherthing &gt; done $ while something; do anotherthing; done
28 shell 

1
อะไร; ทำใน SH
ถ้าฉันพยายามที่จะทำงานa;;bใน sh ฉันได้รับข้อผิดพลาดนี้: sh: &lt;number&gt;: Syntax error: ";;" unexpected หากฉันลองa;;;bฉันได้รับข้อผิดพลาดเดียวกันไม่ใช่;;;แทนที่จะเป็น;;ดังนั้นฉันคิดว่านั่น;;หมายถึงบางสิ่งบางอย่างแม้ว่าฉันจะไม่รู้ว่ามันหมายถึงอะไร นี่คือตัวอย่าง: $ echo A;;echo B sh: 1: Syntax error: ";;" unexpected $ echo A;;;echo B sh: 1: Syntax error: ";;" unexpected $ echo A; ;echo B sh: 1: Syntax error: ";" unexpected ที่นี่คุณจะเห็นว่าเมื่อฉันใช้; ;แทน;;ข้อผิดพลาดจะแตกต่างกันเกี่ยวกับความจริงที่ว่าฉันใช้;โดยไม่ต้องมีคำสั่งมาก่อน;;ดูเหมือนว่าจะเป็นโอเปอเรเตอร์ที่ต่างกันถึงแม้ว่าฉันจะไม่รู้ว่ามันใช้กับอะไร
28 shell 

3
ฉันจะลบ Alias ​​ออกจาก Shell ได้อย่างถาวรได้อย่างไร
เมื่อฉันไม่ได้อยู่ใกล้กับคอมพิวเตอร์ของฉันผู้ชายบางคนได้รับมันและตั้งชื่อแทนสำหรับlsในโฟลเดอร์รากของฉัน 'yes NeverGonnaGiveYouUp'เขาตั้งค่าให้ ตอนนี้เมื่อฉันอยู่ในโฟลเดอร์รูทของฉันแล้วพิมพ์lsฉันจะได้วนวนไม่สิ้นสุดของ NeverGonnaGiveYouUp มันทำให้ฉันบ้าและไม่รู้วิธีกำจัดมัน ผมได้พยายามแล้วunaliasและunalias -aแต่ผู้ที่เพิ่งเอามันออกไปชั่วคราว เมื่อฉันปิดเชลล์และเปิดใหม่อีกครั้งมันจะกลับมา ฉันจะกำจัดอึนี้ได้อย่างไร
28 shell  terminal  alias 

5
คำสั่ง Unix ที่ส่งคืนรหัสส่งคืนทันทีหรือไม่
มีคำสั่ง Unix มาตรฐานที่ทำสิ่งที่คล้ายกับตัวอย่างของฉันด้านล่าง $ &lt;cmd here&gt; 56 $ echo Return code was $? Return code was 56 $ &lt;cmd here&gt;ควรเป็นสิ่งที่สามารถ fork-execed และปล่อยให้ 56 เป็นรหัสทางออกเมื่อกระบวนการออก exitและreturnเปลือก builtins ไม่เหมาะสมสำหรับสิ่งที่ฉันกำลังมองหาเพราะพวกเขามีผลต่อการกล่าวอ้างเปลือกตัวเองด้วยการออกออกมาจากมัน &lt;some cmd&gt;ควรเป็นสิ่งที่ฉันสามารถดำเนินการในบริบทที่ไม่ใช่เปลือก - เช่นเรียกจากสคริปต์ Python subprocessด้วย เช่น/usr/bin/falseออกจากทันทีด้วยรหัสส่งคืน 1 แต่ฉันต้องการควบคุมรหัสที่ส่งคืนนั้นอย่างแน่นอน ฉันสามารถบรรลุผลลัพธ์เดียวกันโดยเขียนสคริปต์ตัวคลุมของฉันเอง $ cat my-wrapper-script.sh # i.e., &lt;some cmd&gt; = ./my-wrapper-script.sh #!/usr/bin/bash exit $1 $ …

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