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

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

1
จุดประสงค์ของคำหลัก "ทำ" ใน Bash สำหรับลูปคืออะไร
วัตถุประสงค์ของdoคำหลักในforไวยากรณ์วนซ้ำคืออะไร สำหรับฉันมันรู้สึกซ้ำซ้อน for i in `seq 1 2`; do echo "hi"; done ทำไมไวยากรณ์ไม่เป็นแบบนี้ for i in `seq 1 2`; echo "hi"; done ฉันแน่ใจว่ามันไม่กรอกวัตถุประสงค์ ฉันแค่ต้องการเรียนรู้
76 bash  shell  for 

3
ช็อตคัต bash คืออะไรที่จะเปลี่ยนเป็นไดเรกทอรีก่อนหน้า?
น่าเศร้าที่ฉันเพิ่งเรียนรู้เกี่ยวกับปีที่แล้วด้วยการสะดุดบนอินเทอร์เน็ตแบบสุ่ม ฉันใช้มันนาน ๆ ครั้งจนฉันลืมเสมอว่ามันคืออะไรตามเวลาที่ฉันต้องการอีกครั้ง คุณจะเปลี่ยนเป็นไดเรกทอรีก่อนหน้าได้อย่างไร
76 bash  shell  cd-command 

7
วิธีการใช้ `ซึ่ง` กับคำสั่ง aliased?
เช่นเดียวกับผู้ใช้ส่วนใหญ่ฉันมีการตั้งค่านามแฝงมากมายเพื่อให้ชุดธงเริ่มต้นสำหรับโปรแกรมที่ใช้บ่อย ตัวอย่างเช่น alias vim='vim -X' alias grep='grep -E' alias ls='ls -G' ปัญหาคือถ้าฉันต้องการใช้whichเพื่อดูว่าvim/ grep/ ls/ / etc ของฉันมาจากไหนนามแฝงที่ได้รับในทาง: $ which vim vim: aliased to vim -X นี่เป็นผลลัพธ์ที่มีประโยชน์ แต่ไม่ใช่สิ่งที่ฉันกำลังมองหาในกรณีนี้ ฉันรู้ว่าvimเป็นนามแฝงvim -Xแต่ฉันต้องการที่จะรู้ว่า vimมาจากไหน ขาดการกำหนดนามแฝงชั่วคราวเพียงเพื่อให้ฉันสามารถใช้whichกับมันได้หรือไม่มีวิธีง่าย ๆ ที่จะwhich'แกะ' นามแฝงและเรียกใช้ตัวมันเองหรือไม่? แก้ไข:ดูเหมือนว่าwhichเป็นตัวเชลล์ที่มีพฤติกรรมที่แตกต่างกันในแต่ละเชลล์ ใน Bash คำแนะนำของ SiegeX เกี่ยวกับการ--skip-aliasทำงานของธง; อย่างไรก็ตามฉันอยู่ใน Zsh มีสิ่งที่คล้ายกันอยู่ที่นั่นไหม?
76 shell  zsh  alias  which 

4
อะไรคือความแตกต่างระหว่างการจัดหา ('.' หรือ 'แหล่งที่มา') และการเรียกใช้ไฟล์ใน bash?
ความแตกต่างระหว่างการเรียกใช้งานสคริปต์เช่นนี้: ./test.sh และดำเนินการสคริปต์เช่นนี้: . test.sh? ฉันลองสคริปต์สองบรรทัดแบบง่าย ๆ เพื่อดูว่าฉันสามารถค้นหาได้หรือไม่ว่ามีความแตกต่าง: #!/bin/bash ls แต่ทั้งสอง. test.shและ./test.shส่งคืนข้อมูลเดียวกัน
76 bash  shell 


7
คุณจะใช้ตัวอธิบายไฟล์เพิ่มเติมเมื่อใด
ฉันรู้ว่าคุณสามารถสร้างไฟล์ descriptor และเปลี่ยนเส้นทางไปยังมัน เช่น exec 3<> /tmp/foo # open fd 3. echo a >&3 # write to it exec 3>&- # close fd 3. แต่คุณสามารถทำสิ่งเดียวกันโดยไม่มีไฟล์ descriptor: FILE=/tmp/foo echo a > "$FILE" ฉันกำลังมองหาตัวอย่างที่ดีเมื่อคุณจะต้องใช้ตัวอธิบายไฟล์เพิ่มเติม


7
ฉันมีกระสุนจำนวนเท่าไร
ปัญหา : ค้นหาว่าฉันมีกระสุนจำนวนเท่าไร รายละเอียด : ฉันเปิดเปลือกจากกลุ่มมาก สร้างและเรียกใช้และออกจาก บางครั้งฉันลืมและเปิดเสียงเรียกเข้าภายในจากนั้นก็อีกเปลือก :( ฉันอยากรู้ว่าฉันอยู่ลึกเท่าไรในเปลือกหอยฉันอาจจะมีมันบนหน้าจอเชลล์ของฉันตลอดเวลา (ฉันสามารถจัดการส่วนนั้น) โซลูชันของฉัน : แยกแผนผังกระบวนการและมองหา vim และ bash / zsh และค้นหาความลึกของกระบวนการปัจจุบันที่อยู่ภายใน มีบางอย่างเช่นนั้นที่มีอยู่แล้วหรือไม่? ฉันหาอะไรไม่เจอ
73 bash  shell-script  shell  vim  zsh 



3
หากกระบวนการสืบทอดสภาพแวดล้อมของผู้ปกครองทำไมเราถึงต้องส่งออก
ฉันอ่านที่นี่ว่าวัตถุประสงค์ของexportเชลล์คือการทำให้ตัวแปรพร้อมใช้งานสำหรับกระบวนการย่อยที่เริ่มต้นจากเชลล์ อย่างไรก็ตามฉันได้อ่านที่นี่และที่นี่ว่า"กระบวนการสืบทอดสภาพแวดล้อมของพวกเขาจากผู้ปกครองของพวกเขา (กระบวนการที่เริ่มต้นพวกเขา)" หากเป็นกรณีนี้เราจำเป็นต้องทำexportอย่างไร ฉันพลาดอะไรไป ตัวแปรเชลล์ไม่ได้เป็นส่วนหนึ่งของสภาพแวดล้อมโดยปริยายหรือไม่? อะไรคือความแตกต่าง?

3
ฉันจะทดสอบความสอดคล้องของ POSIX ของเชลล์สคริปต์ได้อย่างไร
เมื่อพิจารณาว่า POSIX เป็นสิ่งที่ใกล้เคียงกับมาตรฐานทั่วไปมากที่สุดในบรรดา unices ทั้งหมดฉันสนใจที่จะรู้ว่ามีเชลล์ที่รองรับมันโดยเฉพาะหรือไม่ ในขณะที่เชลล์ที่ทันสมัยส่วนใหญ่ให้การสนับสนุน POSIX (และจะเรียกใช้สคริปต์ที่สอดคล้องกับ POSIX โดยไม่มีปัญหาใด ๆ ) พวกมันทำงานได้ไม่ดีในการชี้ให้เห็นคุณลักษณะที่ไม่เข้ากันได้ มีเชลล์ที่ใช้ POSIX และ POSIX เท่านั้นในลักษณะที่มันจะโยนข้อผิดพลาดสำหรับคุณสมบัติที่ไม่เข้ากันได้หรือไม่? แก้ไขฉันต้องการชี้แจงว่าฉันไม่ได้ขอคำแนะนำทั่วไปสำหรับการเขียนเชลล์สคริปต์แบบพกพา คำถามที่เกี่ยวข้องพูดถึงในความคิดเห็นที่ครอบคลุมนี้ ฉันคิดว่าคำถามนี้เมื่อฉันพบว่าbashมี--posixตัวเลือก แต่เพียงเพื่อค้นพบว่ามันมีผลต่อพฤติกรรมการทำให้มีลักษณะเฉพาะบางอย่างซึ่งไม่ใช่สิ่งที่ฉันกำลังมองหา

4
อะไรคือความแตกต่างระหว่างคำสั่ง builtin และคำสั่งที่ไม่ได้ใช้?
มีความแตกต่างที่แท้จริงระหว่างคำสั่ง builtin และคำสั่งอื่นซึ่งในนามสามารถทำสิ่งเดียวกันในนาม? เช่น. builtins ได้รับการบำบัดแบบพิเศษหรือไม่ ... มีค่าใช้จ่ายน้อยลงหรือไม่ .. หรือว่าพวกเขาเพียงแค่ 'สร้างขึ้นใน'; ชอบแดชบอร์ดของรถของคุณ? ... และมีรายการ (ปัจจุบัน) ที่ชัดเจนของ builtins เหล่านี้หรือไม่

8
อะไรคือความแตกต่างระหว่าง $ * และ $ @
พิจารณารหัสต่อไปนี้: foo () { echo $* } bar () { echo $@ } foo 1 2 3 4 bar 1 2 3 4 มันเอาท์พุท: 1 2 3 4 1 2 3 4 ฉันใช้ Ksh88 แต่ฉันสนใจเชลล์ทั่วไปอื่น ๆ ด้วย หากคุณทราบถึงความพิเศษใด ๆ ของเชลล์ที่เฉพาะเจาะจงโปรดอย่าพูดถึงมัน ฉันพบ follwing ในหน้าคน Ksh บน Solaris: ความหมายของ $ * และ …
72 shell  quoting  ksh  arguments 

4
ทำความเข้าใจกับ IFS
หัวข้อต่อไปนี้บนไซต์นี้และ StackOverflow มีประโยชน์สำหรับการทำความเข้าใจวิธีการIFSทำงาน: IFS คืออะไรในบริบทของการวนซ้ำ วิธีการวนลูปมากกว่าบรรทัดของไฟล์ ทุบตีอ่านทีละบรรทัดจากไฟล์ด้วย IFS แต่ฉันยังมีคำถามสั้น ๆ ฉันตัดสินใจถามพวกเขาในโพสต์เดียวกันเนื่องจากฉันคิดว่ามันอาจช่วยผู้อ่านในอนาคตได้ดีขึ้น: ไตรมาสที่ 1 IFSโดยทั่วไปจะกล่าวถึงในบริบทของ "การแยกฟิลด์" การแบ่งฟิลด์เหมือนกับการแยกคำหรือไม่ Q2:ข้อกำหนด POSIX บอกว่า : หากค่าของ IFS เป็นโมฆะจะไม่มีการแยกฟิลด์ การตั้งค่าIFS=เหมือนกับการตั้งค่าIFSเป็นโมฆะหรือไม่ นี่คือสิ่งที่มีความหมายโดยการตั้งค่าempty stringด้วยหรือไม่ Q3:ในข้อมูลจำเพาะ POSIX ฉันอ่านต่อไปนี้: หากไม่ได้ตั้งค่า IFS เชลล์จะทำงานเสมือนว่าค่าของ IFS นั้นคือ <space>, <tab> and <newline> IFSบอกว่าผมต้องการที่จะคืนค่าเริ่มต้นของ ฉันจะทำอย่างไร (โดยเฉพาะอย่างยิ่งฉันจะอ้างถึง<tab>และ<newline>อย่างไร) Q4:สุดท้ายรหัสนี้จะเป็นอย่างไร: while IFS= read -r line do echo $line …
71 shell 

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