ฉันมีสคริปต์ที่ฉันพบและฉันพยายามเรียกใช้มันเพียงแค่ดาวน์โหลดและติดตั้งไลบรารีรันไทม์ Apache บรรทัดแรกคือset -e
และทำให้เกิดข้อผิดพลาด; สิ่งที่ไม่set -e
ทำอะไร?
ฉันมีสคริปต์ที่ฉันพบและฉันพยายามเรียกใช้มันเพียงแค่ดาวน์โหลดและติดตั้งไลบรารีรันไทม์ Apache บรรทัดแรกคือset -e
และทำให้เกิดข้อผิดพลาด; สิ่งที่ไม่set -e
ทำอะไร?
คำตอบ:
สิ่งปลูกสร้างนี้มีความซับซ้อนมากจนสมควรได้รับส่วนของตัวเอง
set ช่วยให้คุณเปลี่ยนค่าของตัวเลือกเชลล์และตั้งค่าพารามิเตอร์ตำแหน่งหรือเพื่อแสดงชื่อและค่าของตัวแปรเชลล์
-e
ตัวเลือก
-e
ออกทันทีหากไปป์ไลน์ (ดู Pipelines) ซึ่งอาจประกอบด้วยคำสั่งง่าย ๆ เดียว (ดู Simple Commands) คำสั่ง subshell ที่อยู่ในวงเล็บ (ดูการจัดกลุ่มคำสั่ง) หรือหนึ่งในคำสั่งที่ดำเนินการโดยเป็นส่วนหนึ่งของรายการคำสั่งที่ล้อมรอบด้วย วงเล็บปีกกา (ดูการจัดกลุ่มคำสั่ง) ส่งคืนสถานะที่ไม่ใช่ศูนย์ เชลล์ไม่ออกหากคำสั่งที่ล้มเหลวเป็นส่วนหนึ่งของรายการคำสั่งทันทีหลังจากนั้นสักครู่หรือจนกว่าคำสำคัญซึ่งเป็นส่วนหนึ่งของการทดสอบในคำสั่ง if ส่วนหนึ่งของคำสั่งใด ๆ ที่ดำเนินการใน && หรือ | | รายการยกเว้นคำสั่งที่ตามหลัง && หรือสุดท้าย | คำสั่งใด ๆ ในไปป์ไลน์ แต่สุดท้ายหรือหากสถานะการส่งคืนคำสั่งกลับด้านด้วย! กับดักบน ERR หากตั้งค่าจะถูกดำเนินการก่อนที่เชลล์จะออก
ตัวเลือกนี้ใช้กับสภาพแวดล้อมของเชลล์และแต่ละสภาพแวดล้อมของ subshell แยกต่างหาก (ดูที่ Command Execution Environment) และอาจทำให้ subshells ออกก่อนที่จะดำเนินการคำสั่งทั้งหมดใน subshell
ที่มา: www.gnu.org
แก้ไขเนื่องจากความคิดเห็นของ @ psusi ด้านล่าง
นอกจากนี้คุณสามารถอ่านหน้าคู่มือของ bash
man bash
ที่ส่วน: คำสั่งเชลล์อาคาร
หรือปัญหา
help set
สำหรับข้อความช่วยเหลือสั้น ๆ
help set
และ / หรือเป็นคนที่ถูกต้องสำหรับman bash
set
set -e
กล่าวโดยย่อเมื่อสคริปต์อยู่ที่ด้านบนสุดของสคริปต์ทุบตีของคุณให้บอกสคริปต์ให้ออกโดยเร็วที่สุดเมื่อบรรทัดใด ๆ ในสคริปต์ล้มเหลว (มีข้อยกเว้นบางอย่างที่ระบุไว้ในคู่มือ) [1]
ในฐานะที่เป็นตัวเลือกการดีบั๊กมันมักจะใช้กับset -x
ซึ่งก็คือการพิมพ์แต่ละบรรทัดคำสั่งขยายก่อนที่จะดำเนินการด้วยเครื่องหมาย "+" [2]
ดูเพิ่มเติมที่:
[1] https://www.peterbe.com/plog/set-ex
[2] http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html
help set
และคู่มือทุบตีแบบเต็มคือinfo bash
หากคุณติดตั้ง bash-doc