ชุด -e ทำอะไร


28

ฉันมีสคริปต์ที่ฉันพบและฉันพยายามเรียกใช้มันเพียงแค่ดาวน์โหลดและติดตั้งไลบรารีรันไทม์ Apache บรรทัดแรกคือset -eและทำให้เกิดข้อผิดพลาด; สิ่งที่ไม่set -eทำอะไร?

คำตอบ:


22

สิ่งปลูกสร้างนี้มีความซับซ้อนมากจนสมควรได้รับส่วนของตัวเอง

set ช่วยให้คุณเปลี่ยนค่าของตัวเลือกเชลล์และตั้งค่าพารามิเตอร์ตำแหน่งหรือเพื่อแสดงชื่อและค่าของตัวแปรเชลล์

-eตัวเลือก

-e

ออกทันทีหากไปป์ไลน์ (ดู Pipelines) ซึ่งอาจประกอบด้วยคำสั่งง่าย ๆ เดียว (ดู Simple Commands) คำสั่ง subshell ที่อยู่ในวงเล็บ (ดูการจัดกลุ่มคำสั่ง) หรือหนึ่งในคำสั่งที่ดำเนินการโดยเป็นส่วนหนึ่งของรายการคำสั่งที่ล้อมรอบด้วย วงเล็บปีกกา (ดูการจัดกลุ่มคำสั่ง) ส่งคืนสถานะที่ไม่ใช่ศูนย์ เชลล์ไม่ออกหากคำสั่งที่ล้มเหลวเป็นส่วนหนึ่งของรายการคำสั่งทันทีหลังจากนั้นสักครู่หรือจนกว่าคำสำคัญซึ่งเป็นส่วนหนึ่งของการทดสอบในคำสั่ง if ส่วนหนึ่งของคำสั่งใด ๆ ที่ดำเนินการใน && หรือ | | รายการยกเว้นคำสั่งที่ตามหลัง && หรือสุดท้าย | คำสั่งใด ๆ ในไปป์ไลน์ แต่สุดท้ายหรือหากสถานะการส่งคืนคำสั่งกลับด้านด้วย! กับดักบน ERR หากตั้งค่าจะถูกดำเนินการก่อนที่เชลล์จะออก

ตัวเลือกนี้ใช้กับสภาพแวดล้อมของเชลล์และแต่ละสภาพแวดล้อมของ subshell แยกต่างหาก (ดูที่ Command Execution Environment) และอาจทำให้ subshells ออกก่อนที่จะดำเนินการคำสั่งทั้งหมดใน subshell

ที่มา: www.gnu.org

แก้ไขเนื่องจากความคิดเห็นของ @ psusi ด้านล่าง

นอกจากนี้คุณสามารถอ่านหน้าคู่มือของ bash

man bash 

ที่ส่วน: คำสั่งเชลล์อาคาร

หรือปัญหา

help set 

สำหรับข้อความช่วยเหลือสั้น ๆ


1
เนื่องจากเป็นคำสั่ง builtin คุณต้องการhelp setและคู่มือทุบตีแบบเต็มคือinfo bashหากคุณติดตั้ง bash-doc
psusi

ขอบคุณสำหรับการชี้แจง @psusi help setและ / หรือเป็นคนที่ถูกต้องสำหรับman bash set
NickTux

12

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


2
ขอบคุณสำหรับคำอธิบายง่ายๆ ฉันมักจะเห็น set -xe ใน Dockerfiles และตอนนี้ฉันรู้แล้วว่าเหตุผล :)
ymakux
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.