모든 모듈을 설명하는 JSON 파일을 기반으로 여러 모듈을 설치하는 스크립트가 있습니다.
각 모듈을 반복하면서 설치 스크립트를 호출합니다.
# Create install log destination
install_log=install_log/`date -Iseconds | awk -F '+' '{print $1}'`".log"
echo -e "To monitor installation:\ntail -f `pwd`/$install_log"
# Install
./install > $install_log # <- This file sometimes does not have the x bit
if [ $? -eq 1 ]; then # Check install exit code
echo -e "\n"
cat $install_log | tail -n 35
echo -e "\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n~~~ Install of module $module_name failed ~~~\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n"
exit 1;
fi
install
스크립트에 x 비트가 없으면 권한 오류 메시지가 표시됩니다 . 그러나 $?
오류 조건은 테스트에서 발견되지 않으며 스크립트는 계속됩니다.
이런 일이 발생하면 어떻게 스크립트를 중지하나요?
답변1
리터럴 솔루션
바꾸다
./install > $install_log # <- This line sometimes does not have the x bit
if [ $? -eq 1 ]; then # Check install exit code
# ...
exit 1;
fi
당신은 할 수 있습니다:
if ! ./install > "$install_log"; then
# ...
exit 1
fi
정확한 오류 코드인지는 중요하지 않지만 스크립트 실행 시도의 일반적인 성공 또는 실패만 알 수 있습니다.
- 그렇지 않으면 다른 사람들이 의견에서 제안한 것처럼 변수의 내용을 저장
$?
한 다음 가능한 모든 방법으로 사용할 수 있습니다.
./install > "$install_log"
exit_code=$?
if [ $exit_code -eq 126 ]; then
# ...
exit 1
fi
다양한 방법
다만, 질문 자체에 대한 접근 방식을 수정해야 한다고 생각합니다. 설치 스크립트의 맥락에서는 설치를 성공적으로 수행하는 것이 더 유리할 수 있습니다. 이는 여러 가지 방법으로 달성할 수 있으며, 특히 다음과 같습니다.
- Prepending을 통해
chmod +x install
파일의 실행 비트를 설정합니다.설치하다:
chmod +x install
if ! ./install > "$install_log"; then
# ...
exit 1
fi
- 스크립트를 전달하여. /설치하다사용자 셸에 대한 인수로:
if ! "${SHELL:-/bin/bash}" ./install > "$install_log"; then
# ...
exit 1
fi
또는 직접 필수/예상 쉘:
if ! bash ./install > "$install_log"; then
# ...
exit 1
fi