.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

関連情報