.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

このステートメントの前に1つ以上のコマンドを入力した場合にのみ機能します。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

関連情報