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

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


4
$ @ ยกเว้นอาร์กิวเมนต์ที่ 1
ฉันต้องเขียนเชลล์สคริปต์ที่ทำงานด้วยวิธีนี้: ./myscript arg1 arg2_1 arg2_2 arg2_3 ....... arg2_# มีการวนรอบสำหรับสคริปต์ภายใน for i in $@ อย่างไรก็ตามอย่างที่ทราบ $ @ ได้รวม $ 1 ถึง $ ($ # - 1) แต่สำหรับโปรแกรมของฉัน $ 1 แตกต่างอย่างชัดเจนจาก $ 2 $ 3 $ 4 ฯลฯ ฉันต้องการวนจาก $ 2 ถึงจุดสิ้นสุด ... ฉันจะทำสิ่งนี้ได้อย่างไร ขอขอบคุณ:)
36 bash  shell  scripting 

5
วิธีการอ่านเชลล์สคริปต์ทั้งหมดก่อนที่จะรันมัน?
โดยปกติหากคุณแก้ไขการเจาะลึกการใช้สคริปต์ที่ทำงานอยู่ทั้งหมดมักจะเกิดข้อผิดพลาด เท่าที่ฉันเข้าใจทุบตี (กระสุนอื่น ๆ ด้วย?) อ่านสคริปต์เพิ่มขึ้นดังนั้นถ้าคุณแก้ไขไฟล์สคริปต์ภายนอกมันเริ่มอ่านสิ่งผิดปกติ มีวิธีป้องกันไหม? ตัวอย่าง: sleep 20 echo test หากคุณรันสคริปต์นี้ทุบตีจะอ่านบรรทัดแรก (พูด 10 ไบต์) และไปที่โหมดสลีป เมื่อดำเนินการต่ออาจมีเนื้อหาต่าง ๆ ในสคริปต์เริ่มต้นที่ 10 ไบต์ ฉันอาจจะอยู่ตรงกลางบรรทัดในสคริปต์ใหม่ ดังนั้นสคริปต์ที่ใช้งานจะเสียหาย
35 shell 

8
วิธี cd โดยอัตโนมัติหลังจาก git clone?
ฉันต้องการcdไดเรกทอรีที่สร้างขึ้นโดยcloneคำสั่งโดยอัตโนมัติหลังจากที่ฉันทำgit cloneบางสิ่งบางอย่าง สำคัญ:ฉันไม่ต้องการแก้ไขไวยากรณ์สำหรับคำสั่ง (เช่นใช้นามแฝง / ฟังก์ชั่น) เพราะมันจะทำลาย zsh-completions ที่ฉันได้รับโดยอัตโนมัติจากPretzoโครงการ แก้ไข : เหตุผลที่ฉันไม่ได้เลือกคำตอบที่ถูกต้องเป็นเพราะไม่มีคำตอบที่ได้ปฏิบัติตามเงื่อนไขข้างต้น ฉันใช้ ZSH แต่คำตอบในเชลล์อื่น ๆ ก็เป็นที่ยอมรับเช่นกัน
35 shell  zsh 

3
การทำความเข้าใจ backtick (`)
ฉันลองคำสั่ง $ b=5; echo `$b`; -bash: 5: command not found แต่จะไม่พิมพ์ 5 อย่างที่ควรจะเป็น สิ่งที่ฉันหายไปที่นี่? `(backquote / backtick) หมายถึงอะไรในคำสั่ง? ดูเหมือนว่าจะ`ประเมินคำสั่งภายในและแทนที่พวกเขาด้วยการส่งออก

4
aliasing cd to pushd - เป็นความคิดที่ดีหรือไม่?
ควรใช้นามแฝงต่อไปนี้หรือไม่: cd() { pushd $1; } ในทุบตี? ฉันคิดว่ามันจะมีประโยชน์มากเพราะฉันสามารถใช้ชุดข้อมูลpopdแทนที่จะเป็นเพียงcd -ครั้งเดียว มีกรณีใดบ้างที่สิ่งนี้อาจเป็นปัญหาหรือไม่?

4
ข้อผิดพลาดทางไวยากรณ์ของ Bash เมื่อ“ อื่น” ตามหลังประโยค“ ว่าง” ที่ว่างเปล่า
ทำไมสคริปต์ต่อไปนี้จะไม่ทำงาน แต่ให้ข้อผิดพลาดทางไวยากรณ์ของelse: LOGS3_DIR=~/logs if [ -d "$LOGS3_DIR" ]; then cd cd "$LOGS3_DIR" echo "$LOGS3_DIR" for filename in `find "." -mtime 1 -type f` do if lsof "$filename" > /dev/null then # file is open else echo "deleting $filename" rm "$filename" fi done fi

5
ทำไม ~ / .bash_profile ของฉันไม่ทำงาน
ฉันใช้ Linux Mint เปลือกเข้าสู่ระบบของฉัน ( cat /etc/passwd | grep myUserName) เป็นทุบตี หลังจากที่ฉันเริ่มสภาพแวดล้อมเดสก์ท็อปแบบกราฟิกและเรียกใช้โปรแกรมจำลองเทอร์มินัลจากนั้นฉันจะเห็นว่าไม่ได้.bash_profileมีแหล่งที่มา (vars สภาพแวดล้อมที่มีการexportแก้ไขจะไม่ถูกตั้งค่า) แต่ถ้าฉันเข้าสู่ระบบจากคอนโซลข้อความ ( ctrl+ alt+ F1) หรือเรียกใช้ด้วยตนเองbash -lจาก terminal emulator .bash_profileทำงานได้ดี ฉันผิดเมื่อฉันคิดว่า.bash_profileควรจะมีแหล่งที่มาเมื่อ X เริ่มทำงานและexportvars ed ทั้งหมดควรมีอยู่ในเครื่องเทอร์มินัลโดยเรียกใช้จาก X หรือไม่ PS การวางทุกอย่างใน.bashrcและจัดหาจาก.bash_profileไม่ใช่ความคิดที่ดี ( https://stackoverflow.com/questions/902946/ ): สิ่งที่สภาพแวดล้อมควรได้รับแหล่งที่มาเพียงครั้งเดียว
35 bash  shell  login  profile 

7
ความแตกต่างระหว่าง 2> & 1> output.log และ 2> & 1 | ออกที. ล็อก
ฉันต้องการทราบความแตกต่างระหว่างสองคำสั่งต่อไปนี้ 2>&1 > output.log และ 2>&1 | tee output.log ฉันเห็นเพื่อนร่วมงานคนหนึ่งของฉันใช้ตัวเลือกที่สองเพื่อเปลี่ยนเส้นทาง ฉันรู้ว่า 2> & 1 ทำอะไรคำถามเดียวของฉันคือวัตถุประสงค์ของการใช้ทีที่ตัวดำเนินการเปลี่ยนเส้นทางแบบง่าย ">" สามารถใช้งานได้อย่างไร

2
วิธีการเปลี่ยนจาก csh เป็น bash เป็นเชลล์เริ่มต้น
ฉันมีเปลือกเริ่มต้นของฉันที่แสดงโดยcsh echo $SHELLฉันต้องการที่จะเปลี่ยนbashเป็นเปลือกเริ่มต้นของฉัน ฉันลองวิธีต่อไปนี้เพื่อไม่เกิดประโยชน์: ด้วยchshฉันได้รับ: chsh: can only change local entries; use ypchsh instead. ด้วยypchshฉันได้รับ: ypchsh: yppasswdd not running on NIS master host ("dcsun2"). ฉันมีเพียงแค่.chsrcในไดเรกทอรีบ้านของฉันและฉันไม่สามารถหาใด ๆไฟล์ใน.profile /etcฉันจะเปลี่ยนเปลือกเริ่มต้นของฉันเป็นbashอย่างไร
34 shell 


6
ทำไมเสียงก้องเชลล์ในตัวจึงเป็นคำสั่ง?
$ which echo echo: shell built-in command. $ which ls /bin/ls $ which cat /bin/cat เพราะเหตุใดจึงไม่ได้สะท้อนยูทิลิตี้ที่เป็นอิสระเช่นls, ps, catetc? ทำไมมันถึงเป็นเปลือกเฉพาะ? มีเหตุผลที่ดีไหม?

3
อะไร: $ {param: = value} หมายถึงอะไร
ฉันอ่านต่อไปนี้ค่ะ คู่มือผู้ใช้ของ Z-Shell : คำพ้องความหมายสำหรับ 'ความจริง' คือ ':'; มันมักจะใช้ในรูปแบบนี้เพื่อให้ข้อโต้แย้งที่มีผลข้างเคียง แต่ไม่ควรใช้ - เช่น : ${param:=value} ซึ่งเป็นสำนวนสามัญในอนุพันธ์บอร์นเชลล์ทั้งหมด ในการขยายพารามิเตอร์$paramจะได้รับค่าค่าหากว่างก่อนและปล่อยให้อยู่คนเดียว เนื่องจากเป็นเหตุผลเดียวสำหรับการขยายพารามิเตอร์คุณจึงใช้:เพื่อละเว้นอาร์กิวเมนต์ ที่จริงแล้วเปลือกสร้าง blithely บรรทัดคำสั่ง - ลำไส้ใหญ่ตามด้วยสิ่งที่มีค่า$paramไม่ว่าจะได้รับมอบหมายหรือไม่ - จากนั้นดำเนินการคำสั่ง; มันแค่เกิดขึ้นที่ ':' จะไม่แจ้งให้ทราบถึงข้อโต้แย้งที่ได้รับ แต่ฉันไม่เข้าใจ ฉันได้รับ:หมายถึงtrueแต่มีสอง colons ในการแสดงออก ในฐานะที่เป็นคำถามเล็กน้อยทำไมสำนวนนี้จึงใช้มากในอนุพันธ์เชลล์บอร์นทั้งหมด มันมีจุดประสงค์อะไร หมายเหตุ: ฉันสนใจในสิ่งที่สำนวนนี้ทำในทั้งทุบตีและในzsh zsh ขอบคุณ
34 bash  shell  zsh 

7
เรียกใช้แอปพลิเคชัน GUI เป็นผู้ใช้อื่น
สมมติว่าผมมีบัญชีผู้ใช้ที่ 2 และuser1 user2เมื่อฉันลงชื่อเข้าใช้user1แล้วสลับไปuser2ใช้suฉันสามารถรันโปรแกรมบรรทัดคำสั่งได้ แต่โปรแกรม GUI ล้มเหลว ตัวอย่าง: user1@laptop:~$ su - user2 user2@laptop:~$ leafpad ~/somefile.txt No protocol specified leafpad: Cannot open display: ดังนั้นฉันจะเรียกใช้โปรแกรมประยุกต์ GUI ได้อย่างไร
34 shell  x11  xorg  su 

5
เราจะรันคำสั่งที่เก็บไว้ในตัวแปรได้อย่างไร?
$ ls -l /tmp/test/my\ dir/ total 0 ฉันสงสัยว่าทำไมวิธีต่อไปนี้ในการเรียกใช้คำสั่งด้านบนจึงล้มเหลวหรือสำเร็จ $ abc='ls -l "/tmp/test/my dir"' $ $abc ls: cannot access '"/tmp/test/my': No such file or directory ls: cannot access 'dir"': No such file or directory $ "$abc" bash: ls -l "/tmp/test/my dir": No such file or directory $ bash -c $abc 'my …
34 bash  shell  quoting  variable 

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