У меня есть один основной сценарий (deploy_test. sh), который просматривает файлы с помощью команды find и выполняет несколько других сценариев оболочки. Основной сценарий не завершается, даже если в другой оболочке происходит сбой. Я использовал несколько опций в начале скрипта, но я все еще не могу выйти, и скрипт продолжается до конца.
deploy_test. sh
#!/usr/bin/env bash
set -euo pipefail
shopt -s execfail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "Do you want to Continue: [Yes/No]"
read action
if [ $action = "Yes" ]
then
echo "Executing scripts"
find ${SCRIPT_DIR}/folder2 -type f -name '*.sh' -exec bash {} \;
echo $?
echo "This should also not be printed"
else
echo "nothing"
exit 1
fi
В моей папке 2 2. sh файлы (1. sh и 2. sh)
1. sh (содержат специальные символы в конце скрипта)
#!/usr/bin/env bash -eu
echo "hi iam in 1.sh and i have error in this file"
`
2. sh
#!/usr/bin/env bash -eu
echo "hi iam in 2.sh and i have no error in this file"
Результат при выполнении скрипта
(deploy) CSI-0048:test_test smullangi$ ./deploy_test.sh
Do you want to Continue: [Yes/No]
Yes
Executing scripts
hi iam in 1.sh and i have error in this file
/Users/smullangi/Desktop/test_test/folder2/1.sh: line 4: unexpected EOF while looking for matching ``'
/Users/smullangi/Desktop/test_test/folder2/1.sh: line 5: syntax error: unexpected end of file
hi iam in 2.sh and i have no error in this file
0
This should also not be printed
Я ожидал, что этот скрипт завершится после ошибки в файле 1. sh, который имел специальный символ. Но какие бы варианты я ни пробовал, скрипт не завершает работу после ошибки.
Любая помощь очень ценится. Я выполняю это на macbook (macos catalina v10.15.3) с bash версией (3.2.57 (1) -релиз)
# ОБНОВЛЕНИЕ1:
Также Я чувствую, что скрипт не выполняется вообще. Если в скрипте нет ошибок, он также завершается. Короче говоря, я чувствую, что мои скрипты в folder1 / folder2 не выполняются после модификации кода согласно советам Филиппа
#!/usr/bin/env bash
set -euo pipefail
shopt -s execfail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
echo "Do you want to Continue: [Yes/No]"
read action
if [ $action = "Yes" ]
then
echo "Executing scripts"
find ${SCRIPT_DIR}/folder2 -type f -name '*.sh' -exec false bash {} +
#find ${SCRIPT_DIR}/folder2 -type f -name '*.sh' -exec bash {} \;
echo $?
echo "This should also not be printed"
else
echo "nothing"
exit 1
fi
Вывод
(deploy) CSI-0048:test_test smullangi$ ./deploy_test.sh
Do you want to Continue: [Yes/No]
Yes
Executing scripts