सबसे पहले, मुझे डर है कि http://explainshell.com-o
द्वारा दिए गए विकल्प का स्पष्टीकरण पूरी तरह से सही नहीं है।
यह set
माना जाता है कि एक bulit-in कमांड है, हम इसके प्रलेखन को help
क्रियान्वित करके देख सकते हैं help set
:
-o option-name
Set the variable corresponding to option-name:
allexport same as -a
braceexpand same as -B
emacs use an emacs-style line editing interface
errexit same as -e
errtrace same as -E
functrace same as -T
hashall same as -h
histexpand same as -H
history enable command history
ignoreeof the shell will not exit upon reading EOF
interactive-comments
allow comments to appear in interactive commands
keyword same as -k
monitor same as -m
noclobber same as -C
noexec same as -n
noglob same as -f
nolog currently accepted but ignored
notify same as -b
nounset same as -u
onecmd same as -t
physical same as -P
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
posix change the behavior of bash where the default
operation differs from the Posix standard to
match the standard
privileged same as -p
verbose same as -v
vi use a vi-style line editing interface
xtrace same as -x
जैसा कि आप देख सकते हैं -o pipefail
इसका मतलब है:
एक गैर-शून्य स्थिति के साथ बाहर निकलने के लिए एक पाइप लाइन का रिटर्न वैल्यू अंतिम कमांड की स्थिति है, या कोई शून्य-शून्य स्थिति के साथ बाहर निकलने पर कोई कमांड नहीं है
लेकिन यह नहीं कहता: Write the current settings of the options to standard output in an unspecified format.
अब, -x
डीबगिंग के लिए उपयोग किया जाता है जैसा कि आप पहले से ही जानते हैं और -e
स्क्रिप्ट में पहली त्रुटि के बाद निष्पादित करना बंद कर देंगे। इस तरह से एक स्क्रिप्ट पर विचार करें:
#!/usr/bin/env bash
set -euxo pipefail
echo hi
non-existent-command
echo bye
echo bye
रेखा जब क्रियान्वित किया जा कभी नहीं होगा -e
क्योंकि प्रयोग किया जाता है
non-existent-command
वापस नहीं करता है 0:
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
-e
अंतिम पंक्ति के बिना मुद्रित किया जाएगा क्योंकि एक त्रुटि के बावजूद हम Bash
स्वचालित रूप से बाहर निकलने के लिए नहीं कहते थे :
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
+ echo bye
bye
set -e
अक्सर यह सुनिश्चित करने के लिए स्क्रिप्ट के शीर्ष पर रखा जाता है कि पहली त्रुटि का सामना होने पर स्क्रिप्ट को रोक दिया जाएगा - उदाहरण के लिए, यदि कोई फ़ाइल डाउनलोड करना विफल रहा है तो उसे निकालने का कोई मतलब नहीं है।
set -uxo pipefail
)।