스크립트가 대화형 모드에서 실행되고 있는지 확인하는 몇 가지 논리가 있는 스크립트가 있습니다. bashrc와 bash_profile에는 내가 내보낸 것과 동일한 환경 변수가 포함되어 있습니다. 스크립트의 if/then 문과 Case 문에 사용되기 때문에 대화형으로 또는 cron을 통해 스크립트를 실행할 때 로드하고 싶습니다.
if [[ $- == *i* ]]; then
source ~/.bash_profile
else
source ~/.bashrc
fi
그런데, 대화형으로 테스트해 보니 이 조건이 작동하지 않고 "else" 조건이 사용되는 것 같습니다. bashrc의 논리는 스크립트가 대화형으로 실행되고 있음을 감지하므로 변수를 로드하지 않습니다. 이 파일의 작동 방식을 심각하게 오해하고 있습니까?
답변1
이는 유용할 수 있습니다.
#!/bin/bash
if [[ $- == *i* ]]; then
# source ~/.bash_profile
echo 'this script is interactive; $- is equal to *i*'
else
# source ~/.bashrc
echo 'this script is not interactive; $- is NOT equal to *i*'
fi
else
스크립트는 기본적으로 서브셸에서 실행되므로 출력은 항상 조건부입니다 . 다음을 약간 변경하여 스크립트를 대화형으로 실행할 수 있습니다 shebang
.
에서: #!/bin/bash
도착하다: #!/bin/bash -i