Bash

.bashrc 中的 if 語句無法正常工作

  • June 24, 2014

.bashrc如果終端至少有 80 個字元寬,我設置為顯示長提示。否則,它會顯示一個降級的、較小的提示。

我使用一個if語句來實現這一點:

dp_smaller_than=80
if [ $COLUMNS -lt $dp_smaller_than ]
then
   PROMPT_COMMAND="degr_prompt"
else
   PROMPT_COMMAND="full_prompt"
fi

僅當我在此語句之前放置一個sleep 0或其他命令時它才能正常工作,否則它會顯示以下錯誤:

[: -lt: unary operator expected

**注意:**我在文件開頭定義了degr_promptandfull_prompt函式。

COLUMNS變數由 bash 設置upon receipt of a SIGWINCH.(請參閱Shell Variables中的部分man bash)。它沒有在您的腳本中設置,因為這不是環境變數。看看自己:

$ export COLUMNS=$COLUMNS
$ ./your-script.sh

現在它起作用了。您需要COLUMNS在腳本中檢索值。您可以使用tput例如:

$ tput cols
186

COLUMNS沒有以某種方式設置在.bashrc.

只需通過以下方式獲取列tput cols

dp_smaller_than=80
if [ $(tput cols) -lt $dp_smaller_than ]
then
   PROMPT_COMMAND="degr_prompt"
else
   PROMPT_COMMAND="full_prompt"
fi

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