web-dev-qa-db-ja.com

.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関数が定義されています。

6
psimon

COLUMNS変数はbashupon receipt of a SIGWINCH.によって設定されます(Shell Variablesman bashセクションを参照)。これは環境変数ではないため、スクリプトには設定されていません。自分を見てください:

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

今では動作します。スクリプトでCOLUMNSの値を取得する必要があります。次に、tputを使用できます。

$ tput cols
186
10

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
5
polym