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

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

2
วงเล็บถูกตีความที่บรรทัดคำสั่งอย่างไร
ในขณะที่อ่านวิธีการตั้งค่าgrubฉันเจอบทความที่อ้างว่าฉันต้องใช้หนึ่งในสองไวยากรณ์ต่อไปนี้ echo \(hd0,0\) >> /boot/grub/grub.conf หรือ echo '(hd0,0)' >> /boot/grub/grub.conf เพราะที่บรรทัดคำสั่งวงเล็บจะถูกตีความในลักษณะพิเศษ มีอะไรพิเศษเกี่ยวกับวงเล็บ? พวกเขาตีความอย่างไร
45 bash  shell  quoting 

5
mv: ย้ายไฟล์เฉพาะในกรณีที่ไม่มีปลายทาง
ฉันสามารถใช้mv file1 file2ในลักษณะที่มันย้ายfile1ไปfile2หากfile2ไม่มีอยู่เท่านั้น? ฉันได้ลองแล้ว yes n | mv -i file1 file2 (สิ่งนี้ให้mvถามว่า file2 ควรถูกเขียนทับหรือไม่ตอบโดยอัตโนมัติ) แต่นอกเหนือจากการดูถูก-iมันก็ไม่ได้ให้รหัสข้อผิดพลาดที่ดีกับฉัน (เสมอ 141 แทนที่จะเป็น 0 ถ้าย้ายและอย่างอื่นถ้าไม่ย้าย)
44 shell  files  mv 

7
การทดสอบหรือ [หรือ [พกพาได้มากกว่าระหว่างเชลล์ bash และระหว่างเชลล์อื่นหรือไม่?
ฉันเห็นฉันสามารถทำ $ [ -w /home/durrantm ] && echo "writable" writable หรือ $ test -w /home/durrantm && echo "writable" writable หรือ $ [[ -w /home/durrantm ]] && echo "writable" writable ฉันชอบใช้ไวยากรณ์ที่สาม พวกมันเทียบเท่ากันในทุกวิถีทางและสำหรับคดีลบและคดีขอบ มีความแตกต่างในการพกพาเช่นระหว่างทุบตีบน Ubuntu และบน OS X หรือรุ่นทุบตีเก่า / ใหม่กว่าเช่นก่อน / หลัง 4.0 และพวกเขาทั้งสองขยายการแสดงออกในลักษณะเดียวกันหรือไม่

11
ฉันจะใช้เอาต์พุตล่าสุดจากบรรทัดรับคำสั่งใหม่ได้อย่างไร
ฉันต้องการทราบวิธีการใช้ผลลัพธ์สุดท้ายจากคอนโซลเช่น: pv-3:method Xavier$ python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()" /Library/Python/2.6/site-packages pv-3:method Xavier$ cd **LASTOUTPUT**

8
ฉันจะเล่นเสียงได้อย่างไรเมื่อสคริปต์พร้อมใช้งาน?
ฉันกำลังดำเนินการอยู่ทุกขณะและจากนั้นสคริปต์งูหลามบางตัวที่ใช้เวลาในการประมวลผลค่อนข้างนาน ฉันรันพวกเขาเช่นนี้: $ time python MyScript.py ฉันจะเล่นเสียงได้อย่างไรเมื่อการประมวลผลสคริปต์เสร็จสิ้น ฉันใช้ Ubuntu 10.10 (เดสก์ท็อป Gnome)
44 shell  ubuntu  audio 

10
ทำให้โหมดแสดงพรอมต์ zsh ของฉันในโหมด vi
ฉันใช้bindkey -v(สำหรับ bash-ers set -o viฉันคิดว่ามันใช้งานได้ในโหมด zsh ด้วย) หรือโหมด vi (m) แต่มันทำให้ฉันสับสนว่าฉันไม่มีคิวภาพใด ๆ ที่จะบอกฉันว่าฉันอยู่ในโหมดแทรกหรือโหมดคำสั่ง ไม่มีใครรู้ว่าฉันจะทำให้โหมดการแสดงพร้อมท์ของฉันปรากฏขึ้นได้อย่างไร?
44 shell  prompt  zsh 

7
อะไรช่วยในการจำที่ดีสำหรับคำสั่ง shell double และ single?
ฉันเขียนสคริปต์ไม่เพียงพอที่จะจำได้โดยไม่ต้องค้นหาว่าการเสนอราคาสองครั้งหรือครั้งเดียวส่งผลให้ตัวแปร Unix ถูกแทนที่ ฉันเข้าใจว่าเกิดอะไรขึ้น คำถามของฉันคือไม่มีใครมีเคล็ดลับความจำสำหรับการสร้างกฎการอ้างอิงที่ถูกต้องในหัวของฉัน

1
ค้นหาไฟล์ที่ไม่มีนามสกุล
สมมติว่าฉันมี: foo.txt bar baz.ooo ถ้าฉันใช้ls -1 !(*.*)แล้วฉันจะได้รับbarผล เยี่ยมมากตอนนี้ฉันต้องการได้ผลลัพธ์เหมือนกันกับการค้นหา - บางอย่างfind -regexที่สามารถทำงานได้ บันทึก: find -name !(*.*)ไม่ใช่คำตอบ!(*.*)ในขณะที่มันยังคงเป็นรูปกลมของ Bash ซึ่งฉันไม่สามารถใช้ได้
43 bash  shell  find  wildcards 

4
แสดงเส้นทางในแบบที่มนุษย์อ่านได้
ฉันต้องการแสดงตัวแปรสภาพแวดล้อม PATH ในแบบที่มนุษย์อ่านได้มากขึ้น $ echo $PATH /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin:/Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin:/Users/arturo/.rvm/bin:/usr/local/git/bin:/Users/arturo/.gvm/groovy/current/bin:/Users/arturo/.gvm/grails/current/bin:/Users/arturo/.gvm/griffon/current/bin:/Users/arturo/.gvm/gradle/current/bin:/Users/arturo/.gvm/lazybones/current/bin:/Users/arturo/.gvm/vertx/current/bin:/Users/arturo/.gvm/bin:/Users/arturo/.gvm/ext:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin ฉันกำลังคิดในบางสิ่งเช่นนี้: $ echo $PATH | some cut and awk magic /Users/arturo/.rvm/gems/ruby-1.9.3-p392/bin /Users/arturo/.rvm/gems/ruby-1.9.3-p392@global/bin /Users/arturo/.rvm/rubies/ruby-1.9.3-p392/bin /Users/arturo/.rvm/bin ...

3
$ {1 +“ $ @”} หมายถึงอะไรในเชลล์สคริปต์และมันแตกต่างจาก“ $ @” อย่างไร
ในเอกสารประกอบ Perl, perlrun (1)แนะนำการเรียกใช้สคริปต์ Perl โดยใช้ส่วนหัวของสองภาษาเชลล์ / Perl: #!/bin/sh #! -*-perl-*- eval 'exec perl -x -wS $0 ${1+"$@"}' if 0; อะไร${1+"$@"}หมายถึง? ฉันลองใช้"$@"แทน (โดยใช้ Bash เป็น / bin / sh) และดูเหมือนว่าจะใช้งานได้เช่นกัน แก้ไข ${1:+"$@"}สองคำตอบด้านล่างบอกว่ามันควรจะเป็น ฉันรับรู้ถึง${parameter:+word}ไวยากรณ์ ("ใช้ค่าทางเลือก") ที่ระบุไว้ใน bash (1) อย่างไรก็ตามฉันไม่มั่นใจเพราะ ทั้งสองอย่าง${1+"$@"}และใช้"$@"งานได้ดีแม้ว่าจะไม่มีพารามิเตอร์ก็ตาม ถ้าฉันสร้าง simple.sh เป็น #!/bin/sh eval 'exec /usr/bin/perl -x -S -- $0 …
43 bash  shell  perl 

4
วิธีพิมพ์“ $” ในเอกสารที่นี่
ฉันจะสะท้อน "$" ใน here-doc ใน bash ได้อย่างไร? $ABC=home_dirตัวอย่างเช่นผมต้องการที่จะมีไฟล์ที่มีเนื้อหาบนเซิร์ฟเวอร์ระยะไกลเช่น $ ssh hostname sudo -s <<EOF echo "$ABC=home_dir" > file EOF แต่มันก็จะถือว่าเป็นตัวแปร ฉันจะพิมพ์ตัวอักษรได้$อย่างไร
43 bash  shell  quoting 

7
เหตุใด [AZ] จึงตรงกับอักษรตัวพิมพ์เล็กใน bash
ในเชลล์ทั้งหมดที่ฉันรู้จักrm [A-Z]*ลบไฟล์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษรตัวพิมพ์ใหญ่ แต่ด้วยการทุบตีสิ่งนี้จะลบไฟล์ทั้งหมดที่ขึ้นต้นด้วยตัวอักษร เนื่องจากปัญหานี้มีอยู่บน Linux และ Solaris ที่มี bash-3 และ bash-4 จึงไม่สามารถเป็นข้อบกพร่องที่เกิดจากตัวจับรูปแบบ buggy ใน libc หรือนิยามที่ตั้งที่พลาดไป พฤติกรรมที่แปลกและเสี่ยงนี้มีจุดประสงค์หรือเป็นเพียงข้อผิดพลาดที่มีอยู่ซึ่งไม่ได้ผสมกันมาหลายปีหรือไม่?
43 bash  shell  wildcards  locale 

2
`cat <> file` ทำงานอย่างไร
cat &lt; fileพิมพ์เนื้อหาของไฟล์ไปยัง stdout cat &gt; fileอ่าน stdin จนกว่าCtrl+ Dมีการตรวจพบและป้อนข้อความถูกเขียนไปยังแฟ้ม cat &lt;&gt; fileอย่างน้อยในเวอร์ชัน Bash ของฉันพิมพ์เนื้อหาของไฟล์อย่างมีความสุข (โดยไม่มีข้อผิดพลาด) แต่ไม่ได้แก้ไขไฟล์หรืออัปเดตการประทับเวลาการแก้ไข มาตรฐาน Bash แสดงให้เห็นถึงการเพิกเฉยที่ปรากฏ&gt;ในข้อความที่สามได้อย่างไรและที่สำคัญกว่านั้นคือการทำอะไร


1
มีคำสั่งมาตรฐานที่มักจะออกมาพร้อมกับความล้มเหลวหรือไม่?
ฉันต้องการทดสอบสคริปต์ด้วยคำสั่งที่ล้มเหลว ฉันสามารถใช้คำสั่งที่มีอยู่ด้วยข้อโต้แย้งที่ไม่ดี ฉันยังสามารถเขียนสคริปต์ง่าย ๆ ที่ออกโดยทันทีด้วยความล้มเหลว ทั้งสองอย่างนี้ทำได้ง่ายและทำงานให้ฉัน แต่ถ้ามีคำสั่งมาตรฐานสำหรับวัตถุประสงค์นี้ฉันต้องการใช้สิ่งนั้นแทน

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