if-Anweisung in .bashrc funktioniert nicht richtig

if-Anweisung in .bashrc funktioniert nicht richtig

Ich habe es so eingerichtet, .bashrcdass eine lange Eingabeaufforderung angezeigt wird, wenn das Terminal mindestens 80 Zeichen breit ist. Andernfalls wird eine eingeschränkte, kleinere Eingabeaufforderung angezeigt.

Um dies zu erreichen , verwende ich eine ifAnweisung:

dp_smaller_than=80
if [ $COLUMNS -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi

Es funktioniert nur richtig, wenn ich sleep 0vor dieser Anweisung einen oder einen anderen Befehl setze, andernfalls wird der folgende Fehler angezeigt:

[: -lt: unary operator expected

Notiz:Ich habe die degr_promptund full_promptFunktionen am Anfang der Datei definiert.

Antwort1

COLUMNSDie Variable wird von Bash gesetzt upon receipt of a SIGWINCH.(siehe Shell VariablesAbschnitt in man bash). Sie wird in Ihrem Skript nicht gesetzt, da es sich nicht um eine Umgebungsvariable handelt. Sehen Sie selbst:

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

COLUMNSJetzt funktioniert es. Sie müssen den Wert in Ihrem Skript abrufen . Sie können tputbeispielsweise Folgendes verwenden:

$ tput cols
186

Antwort2

COLUMNSist irgendwie nicht in gesetzt .bashrc.

Rufen Sie die Spalten einfach tput colswie folgt ab:

dp_smaller_than=80
if [ $(tput cols) -lt $dp_smaller_than ]
then
    PROMPT_COMMAND="degr_prompt"
else
    PROMPT_COMMAND="full_prompt"
fi

verwandte Informationen