Ksh

為什麼“如果 tty -s”有效,但“如果ty_-小號噸噸是−stty -s“ 才不是?

  • June 13, 2019

注意,我ksh在 CentOS 中使用和執行。

我有一個 shell 腳本,其中記錄器功能設置如下:

if tty -s
then
 echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
 echo "${FOO}" >> ${BAR_LOG_FILE} 
fi

我的問題是,當我將它重構if為看起來像if我的程式碼中的所有其他測試時,它停止執行。

為什麼?

我的重構如下:

if [ tty -s ];
then
 echo "${FOO}" | tee -a ${BAR_LOG_FILE}
else
 echo "${FOO}" >> ${BAR_LOG_FILE} 
fi

我唯一的改變是在 the 周圍加上括號if並添加一個;,就像我的其他if測試一樣,它們都按預期工作。

我的重構導致了一個看起來像是BAR_LOG_FILE找不到的錯誤。

這裡發生了什麼?

後面的方括號if不是 shell 語法,可以根據風格偏好省略或不省略,它們是一個單獨的命令,test. (連結的手冊頁描述了外部test/[命令,但許多 shell 提供了自己的實現。)

寫作

if [ tty -s ];

相當於寫

if test tty -s;

並且由於test/[沒有tty運算符,因此它失敗了。

if後跟一個命令,它執行,該命令的退出程式碼確定在 : 之後採用哪個分支if:如果為 0,則採用then分支,否則採用else分支(如果有)。

引用自:https://unix.stackexchange.com/questions/524766