Die Variable PIPESTATUS ist leer

Die Variable PIPESTATUS ist leer

Ich arbeite an einem Linux-Server und habe festgestellt, dass die Array-Variable PIPESTATUS immer leer ist. Ich verwende Bash v4.1.2(1)-Release

$ echo $BASH_VERSION
4.1.2(1)-release
$ false | true | false
$ echo ${PIPESTATUS[@]} # returns nothing (empty)

Was könnte der Grund sein? Ich habe Online-Foren einschließlich Stack Exchange durchsucht, aber keine gute Antwort gefunden

Antwort1

Dies kann passieren, wenn $PIPESTATUSals Skalarvariable oder als etwas anderes deklariert wurde, das kein Array ist, oder wenn es schreibgeschützt gemacht wurde, entweder von Ihnen oder durch Code, der in oder über Ihr ~/.bashrc/ ~/.bash_profile… gefunden wurde, oder weil es PIPESTATUS=beim Start in der Umgebung vorhanden war bash.

Sie können den Typ, die Attribute und den Wert von $PIPESTATUSmit überprüfen typeset -p PIPESTATUS.

Bleibt dann $PIPESTATUSskalar und wird nicht automatisch in ein Array konvertiert, um die Beendigungsstatus von Pipeline-Komponenten zu speichern:

$ env PIPESTATUS= bash -c 'false | true; typeset -p PIPESTATUS'
declare -x PIPESTATUS=""
$ bash -c 'PIPESTATUS=; false | true; typeset -p PIPESTATUS'
declare -- PIPESTATUS=""
$ bash -c 'typeset -A PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -A PIPESTATUS
$ bash -c 'readonly PIPESTATUS; false | true; typeset -p PIPESTATUS'
declare -r PIPESTATUS

Außer in diesem readonlyFall kann dies umgangen werden, indem die Variable wieder in ein Array umgewandelt wird oder indem sie gelöscht wird:

typeset -a PIPESTATUS # beware it can affect the scope if run from a function
unset -v PIPESTATUS

verwandte Informationen