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

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

我設定.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_prompt和函數。full_prompt

答案1

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

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

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

$ tput cols
186

答案2

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

相關內容