#!/bin/bash
#shellcheck enable=check-set-e-suppressed
set -e
deploy() {
make -j "$(nproc)" foo test
cp ./foo /var/www/example.com/cgi-bin
./foo --version 2>&1
}
version=$(deploy)
echo "Successfully deployed $version"
#!/bin/bash
#shellcheck enable=check-set-e-suppressed
set -e
shopt -s inherit_errexit
deploy() {
make -j "$(nproc)" foo test
cp ./foo /var/www/example.com/cgi-bin
./foo --version 2>&1
}
version=$(deploy)
echo "Successfully deployed $version"
ShellCheck found a Bash function invoked in a command substitution
with set -e
enabled.
Unlike other shells, Bash disables set -e
in command
substitution by default. This means that the function will not exit on
error.
In the problematic code, the hope was that the function (and therefore the script) would fail if the build and test suite failed. Instead, the deployment continues even if the tests fail.
This can be fixed by either using
version=$(set -e; deploy)
or by enabling
inherit_errexit
as in the correct example.
If you don't care that the function runs without set -e
,
you can ignore this warning.
ShellCheck is a static analysis tool for shell scripts. This page is part of its documentation.