.bashrc 中的 if 语句无法正常工作

psi*_*mon 6 shell bash terminal environment-variables

我设置 .bashrc如果终端至少有 80 个字符宽,为显示一个长提示。否则,它会显示一个降级的、较小的提示。

我使用一个if语句来实现这一点:

dp_smaller_than=80
if [ $COLUMNS -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi
Run Code Online (Sandbox Code Playgroud)

如果我sleep 0在此语句之前放置一个或其他命令,它只能正常工作,否则会显示以下错误:

[: -lt: unary operator expected
Run Code Online (Sandbox Code Playgroud)

注意:我在文件的开头定义了degr_promptfull_prompt函数。

Ark*_*zyk 10

COLUMNS变量由 bash 设置upon receipt of a SIGWINCH.(参见 中的Shell Variables部分man bash)。它未在您的脚本中设置,因为这不是环境变量。看看你自己:

$ export COLUMNS=$COLUMNS
$ ./your-script.sh
Run Code Online (Sandbox Code Playgroud)

现在它起作用了。您需要COLUMNS在脚本中检索值。tput例如,您可以使用:

$ tput cols
186
Run Code Online (Sandbox Code Playgroud)


pol*_*lym 5

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
Run Code Online (Sandbox Code Playgroud)