互動運行或透過 cron 運行時,腳本 bash 無法獲得 $PS1 或 $- 的差異

互動運行或透過 cron 運行時,腳本 bash 無法獲得 $PS1 或 $- 的差異

我希望我的 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 腳本從來沒有開啟互動選項。它們在任何地方都是非互動的。

相關內容