Par exemple
$ true | false | true
Ou
$ ls -S1 hoge* | haed -n1
Immédiatement après l'exécution d'un script shell qui inclut le traitement du tube
$ echo $?
Lors de la vérification du code d'état avec une commande telle que, même si une erreur se produit dans le premier processus ou dans le processus intermédiaire, seul le dernier code d'état du tube peut être obtenu.
Lorsque vous obtenez le code d'état de la progression, vous pouvez l'obtenir en vous référant au tableau $ {PIPESTATUS [@]}
immédiatement après l'exécution.
$ true | false | true
$ echo ${PIPESTATUS[@]}
0 1 0
Normalement, dans le cas de Fabric, les valeurs de retour des commandes «run» et «sudo» ont des propriétés telles que «.succeeded» et «.failed», c'est pourquoi on y fait souvent référence.
result = run("false", warn_only=True)
print result.succeeded
Cependant, comme il n'y a pas de variable correspondant à $ {PIPESTATUS [@]}
, le code d'état ne peut pas être obtenu au milieu.
Prenons un exemple comme le script shell au début.
@task
def return_test():
#Afficher le plus gros fichier contenant la chaîne hoge dans le répertoire courant
result = run("ls -S1 *hoge* | head -n1")
print result.succeed
print result
À ce stade, s'il n'y a pas de fichier / répertoire contenant «hoge» dans le répertoire courant, «.succeeded» ne renvoie que le résultat de «run» (puisque head peut être exécuté, c'est «True»), En tant que contenu, l'affichage d'erreur (sortie d'erreur standard) est renvoyé tel quel.
[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.
Les informations que je voulais à l'origine n'ont pas été retournées, et c'est désagréable, mais dans cet exemple, il peut arriver que le nom du répertoire soit un tel nom, ce qui pose un problème.
Rendons le thé boueux.
@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.
Recommended Posts