![스크립트 bash는 대화식으로 또는 cron을 통해 실행할 때 $PS1 또는 $-의 차이를 얻을 수 없습니다.](https://rvso.com/image/617241/%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20bash%EB%8A%94%20%EB%8C%80%ED%99%94%EC%8B%9D%EC%9C%BC%EB%A1%9C%20%EB%98%90%EB%8A%94%20cron%EC%9D%84%20%ED%86%B5%ED%95%B4%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EB%95%8C%20%24PS1%20%EB%98%90%EB%8A%94%20%24-%EC%9D%98%20%EC%B0%A8%EC%9D%B4%EB%A5%BC%20%EC%96%BB%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
시스템 사용자가 대화형으로 실행할 때는(예를 들어 디버그 목적으로) 크론 스크립트가 장황하게 실행되고 그렇지 않으면 조용히(크론의 경우 오류가 발생한 경우에만 이메일을 받기를 원함) 실행되기를 원합니다.
내 스크립트에서 이것을 시도했습니다.
case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac
그러나 대화식으로 실행하더라도(/bin/bash /tmp/my_script.sh) 항상 "이 쉘은 그렇지 않습니다"를 반환하고
echo $-
쉘 스크립트에서는 hiB가 아닌 hB를 반환합니다.
나는 또한 시도했다
if [ -z $PS1 ]
cron에 $PS1이 설정되어 있지 않다고 생각했지만 다시 한번 프롬프트에서 echo $PS1이 이 변수를 반환하고 스크립트에서 대화형으로 아무것도 반환하지 않습니다.
대화형(/bin/bash my_script.sh)으로 이것이 $-의 i 값이나 $PS1의 값을 반환하지 않는 이유를 알고 싶습니다.
도움을 주셔서 감사합니다!
답변1
당신은 할 수stdin이 tty인지 확인하세요..
또는 추측하는 대신 조용히 또는 장황하게 알려주는 플래그를 스크립트에 추가할 수 있습니다.
답변2
cron에서 환경 변수를 설정하고 이를 확인할 수 있습니다.
cron 항목 위의 한 줄에 THISISCRON=1을 입력합니다.
답변3
Bash 스크립트에는 대화형 옵션이 없습니다. 어디에서나 상호작용이 불가능합니다.