Zum Beispiel
$ true | false | true
Oder
$ ls -S1 hoge* | haed -n1
Unmittelbar nach dem Ausführen eines Shell-Skripts, das Pipe-Verarbeitung wie enthält
$ echo $?
Wenn Sie den Statuscode mit einem Befehl überprüfen, z. B. selbst wenn im ersten oder Zwischenprozess ein Fehler auftritt, kann nur der letzte Statuscode der Pipe abgerufen werden.
Wenn Sie den Statuscode des Fortschritts erhalten, können Sie ihn abrufen, indem Sie unmittelbar nach der Ausführung auf das Array "$ {PIPESTATUS [@]}" verweisen.
$ true | false | true
$ echo ${PIPESTATUS[@]}
0 1 0
Normalerweise haben im Fall von Fabric die Rückgabewerte der Befehle "run" und "sudo" Eigenschaften wie ".succeeded" und ".failed", daher wird häufig darauf Bezug genommen.
result = run("false", warn_only=True)
print result.succeeded
Da es jedoch keine Variable gibt, die "$ {PIPESTATUS [@]}" entspricht, kann der Statuscode nicht in der Mitte abgerufen werden.
Betrachten Sie ein Beispiel wie das Shell-Skript am Anfang.
@task
def return_test():
#Zeigen Sie die größte Datei mit dem String Hoge im aktuellen Verzeichnis an
result = run("ls -S1 *hoge* | head -n1")
print result.succeed
print result
Wenn zu diesem Zeitpunkt im aktuellen Verzeichnis keine Datei / kein Verzeichnis mit "hoge" vorhanden ist, gibt ".succeeded" nur das Ergebnis von "run" zurück (da der Kopf ausgeführt werden kann, ist dies "True"). Als Inhalt wird die Fehleranzeige (Standardfehlerausgabe) unverändert zurückgegeben.
[192.168.0.1] Executing task 'return_test'
[192.168.0.1] run: ls -S1 *hoge* | head -n1
[192.168.0.1] out: ls: cannot access *hoge*: No such file or directory
[192.168.0.1] out:
True
ls: cannot access *hoge*: No such file or directory
Done.
Disconnecting from 192.168.0.1... done.
Die Informationen, die ich ursprünglich wollte, wurden nicht zurückgegeben und sind unangenehm. In diesem Beispiel kann es jedoch vorkommen, dass der Verzeichnisname ein solcher Name ist.
Lassen Sie uns den Tee schlammig machen.
@task
def return_test():
result = run("ls -S1 *hoge* 2> /dev/null | head -n1")
print result
[192.168.0.1] Executing task 'return_test'
[192.168.0.1] run: ls -S1 *hoge* 2> /dev/null | head -n1
Done.
Disconnecting from 192.168.0.1... done.