
我希望我的 cron 腳本在由系統使用者互動運行時詳細執行(例如用於偵錯目的),否則安靜地執行(對於 cron,因為當且僅當我收到錯誤時我希望收到電子郵件)。
我在我的腳本中嘗試過這個:
case "$-" in
*i*) echo "this shell is interactive" > /tmp/log;
*) echo "this shell isn't" > /tmp/log;
esac
但即使以交互方式運行(/bin/bash /tmp/my_script.sh),它也總是返回“this shell isn't”並且
echo $-
在 shell 腳本中傳回 hB 而不是 hiB。
我也嘗試過
if [ -z $PS1 ]
認為 cron 沒有設定 $PS1,但再次從提示符處, echo $PS1 返回此變量,並在腳本中交互地返回任何內容:/
我想知道為什麼互動式地(/bin/bash my_script.sh)不會傳回 $- 的 i 值,也不會傳回 $PS1 的值。
非常感謝您的幫忙!
答案1
你可以檢查 stdin 是否為 tty。
或者,您可以在腳本中添加一個標誌,告訴它要安靜或詳細,而不是讓它猜測。
答案2
您可以在 cron 中設定一個環境變量,並檢查它。
將 THISSCRON=1 單獨放在 cron 條目上方的一行上。
答案3
Bash 腳本從來沒有開啟互動選項。它們在任何地方都是非互動的。