Für einige Shell-Sitzungen möchte ich in der Lage sein, ein Warnflag zu drucken, wenn eine Shell-Variable nicht gesetzt und exportiert wird.
Es ist ziemlich einfach, so etwas zu tun, um "Error" in der Eingabeaufforderung zu drucken, wenn "unset" SET_ME
oder "null" ist.
test_var () { test -z "$1" && echo Error; }
PS1='$(test_var "$SET_ME") \$ '
Dieses Flag wird jedoch nicht angezeigt, wenn ich es SET_ME
ohne Export festgelegt habe. Dies ist ein Fehler, den ich erkennen möchte. Kurz etwas wie $(bash -c 'test -z "$SET_ME" && echo Error;')
oder greppen die Ausgabe export
, gibt es eine einfache Prüfung , dass ich zu Test tun kann , ob SET_ME
exportiert worden ist ?
Eine reine Nicht-POSIX-Bash-Lösung ist völlig akzeptabel.
bash
environment-variables
CB Bailey
quelle
quelle
typeset
Attribute.-z "$1"
vorausgesetzt, ich übergebe den Wert einer Variablen antest_var
(wie ich war), währenddeclare -p
der Name erwartet wird. Ich kam mit diesem Test auf , die den Namen eines Shell - Variable nimmt:test_exported_notnull () { re='^declare -\w*x'; [[ -n $(eval echo \$$1) ]] && [[ $(declare -p "$1") =~ $re ]]; }
.eval
, fügen Sie einfach diese erste Zeile hinzu:var=$1
und verwenden Sie dann[[ -z "${!var}" ]] && echo Error
.Mir ist bewusst, dass die Frage 3 Jahre alt ist, jedoch kann man die folgende Lösung einfacher finden:
antwortet, wenn die Variable exportiert wird und einen nicht leeren Wert hat.
quelle
In Bash 4.4 oder höher können Sie die
${parameter@a}
Shell-Parametererweiterung verwenden , um eine Liste der Attribute zu einem Parameter abzurufen, auch wenn dieser exportiert wird.Hier ist eine einfache Funktion
${parameter@a}
, die zeigt, ob eine bestimmte Variable mit ihrem Namen exportiert wird:Anwendungsbeispiel:
Wie es funktioniert:
Das von zurückgegebene Format
${parameter@a}
ist ein Zeichen pro Attribut, wobei die Bedeutung jedes Attributzeichens aus den entsprechenden Optionen des Befehls declare stammt. In diesem Fall möchten wir nachx
exportiert suchen .quelle
Sie können mit
compgen
mit seiner-X
Option , um zu bestimmen , ob eine Variable exportiert wird:Z.B:
quelle
Wenn ich mich damit abfinde,
export
und verwenden zu müssengrep
, ist der einfachste Test wahrscheinlich so etwas.oder wenn ich auch nicht null will:
quelle
export
nicht spezifiziert ist, und definiert ein genaues Format fürexport -p
ähnlich wie Bash,export
aber anders. Aber bash scheint POSIX zu ignorieren und verwendet dasselbe Format wieexport
fürexport -p
!Der
export
Befehl ohne Parameter gibt eine Liste der exportierten Namen in der aktuellen Umgebung an:Beim Schneiden und Sedieren werden die Flusen entfernt:
Es gibt Ihre Exportliste, die zur weiteren Verarbeitung bereit ist.
quelle
export
"), da meine geplante Verwendung in meiner Eingabeaufforderung liegt.export
, und dies war das einzige, was ich mir ausgedacht habe. Es kommt auch keine Hilfe aus der Shell heraus. Dasexport
ist sowieso eingebaut, aber ich bezweifle, dass du das vermeiden kannstgrep
.Die einfachste Methode, die mir derzeit einfällt:
quelle