.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

相关内容