======================================================
−e When this option is on, when any command fails (for any of the reasons listed in Section 2.8.1, Consequences of Shell Errors or by return‐
ing an exit status greater than zero), the shell immediately shall exit with the following exceptions:
1. The failure of any individual command in a multi-command pipeline shall not cause the shell to exit. Only the failure of the pipeline
itself shall be considered.
2. The −e setting shall be ignored when executing the compound list following the while, until, if, or elif reserved word, a pipeline
beginning with the ! reserved word, or any command of an AND-OR list other than the last.
3. If the exit status of a compound command other than a subshell command was the result of a failure while −e was being ignored, then −e
shall not apply to this command.
This requirement applies to the shell environment and each subshell environment separately. For example, in:
set -e; (false; echo one) | cat; echo two
the false command causes the subshell to exit without executing echo one; however, echo two is executed because the exit status of the
pipeline (false; echo one) | cat is zero.
==========================
#!/bin/bash
set -e
function myf {
echo "Enter myf"
false
echo "Exit myf"
}
echo "Start"
myf
echo "End"
$ ./x.sh
Start
Enter myf
=======================
#!/bin/bash
set -e
function myf {
echo "Enter myf"
false
echo "Exit myf"
}
echo "Start"
myf || true
echo "End"
$ ./x.sh
Start
Enter myf
Exit myf
End
========================
#!/bin/bash
set -e
function myf {
echo 'myf' >&2
exit 2
}
function test {
a=$(myf)
echo "TEST DONE"
}
a=$(test)
echo "DONE"
$ ./x.sh
myf
DONE
===========================
#!/bin/bash
set -e
function myf {
echo 'myf' >&2
exit 2
}
a=$(myf)
echo "TEST DONE"
$ ./x.sh
myf
====================
#!/bin/bash
set -e
function myf {
echo 'myf' >&2
false
echo "myf DONE"
}
a=$(myf)
echo "DONE"
$ ./x.sh
myf
DONE
=======================
#!/bin/bash
set -e
function myf {
echo 'myf' >&2
false
echo "myf DONE"
}
function test {
a=$(myf)
echo 'test DONE'
}
a=$(test)
echo "DONE"
$ ./x.sh
myf
DONE
'Language > Bash' 카테고리의 다른 글
Bash print call stack at ERR(trap) (0) | 2017.03.08 |
---|