Letzter Befehl in einer Schleife ist erfolgreich, aber der Beendigungsstatus ist 1


0

Warum gibt das Folgende 1, wenn ich es tue echo $??

#!/bin/bash  
echo "two">file.txt  
ARRAY=(one three two)  
rc=0  
for i in ${ARRAY[@]}; do  
    echo "grepping $i "  
    grep "$i" file.txt || rc=$?  
done  
exit $rc  

Der letzte Befehl ist erfolgreich, da es grepfür ist two.
Die Ausgabe ist:

grepping one 
grepping three   
grepping two   
two  
~$ echo $?  
1  

Ich habe mit 0 gerechnet. Beachten Sie, dass ich rc als 1 erhalten möchte, wenn ein Befehl in der Schleife fehlschlägt. Aber ich möchte verstehen, warum dies in diesem Fall geschieht

Antworten:


2

Der letzte Befehl ist möglicherweise erfolgreich, aber Sie speichern nur den Exit-Status von fehlgeschlagenen greps to rc. Wenn also einer der Bäume grepausfällt, wird Ihr Skript mit einem Beendigungsstatus ungleich Null beendet.


Ah, perfekt, das ist was ich brauche.
Jim

@ Jim gut! Wenn dies Ihr Problem löst, ziehen Sie bitte in Betracht , die Antwort zu akzeptieren .
Kusalananda

Würde set -eauch das erreichen, wonach ich suche?
Jim

@Jim Using set -ewürde das Skript beenden, sobald der erste grepnichts findet. Wenn du das willst, dann ok.
Kusalananda

Ich möchte das aber auch eine Fehlermeldung ausgeben, um den Grund zu zeigen
Jim
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.