Einstellung exit-codes in Unix-shell-Skripte

Habe ich test.sh das hat mehrere return-Zustand und test1.sh nur echo-Anweisung.Wenn ich test2.sh meine Logik ausgeführt werden soll test.sh Prozess die Datei, die ich.e "Datei erfolgreich", und nennen Sie test1.sh script .Sollte es nicht laufen test1.sh Skript aus, wenn andere else-Bedingung ausgeführt wurde.ich.e "Datei nicht erfolgreich", "Eingabe-Datei nicht vorhanden ist in das Verzeichnis"

Das problem, das ich bin vor ist, wenn es ausgeführt wird, einen anderen Zustand wie "Datei nicht erfolgreich", "Eingabe-Datei nicht vorhanden, im Verzeichnis" es ist nicht umstimmen "1" angegebenen exit-code, der aber wiederum 0 zurückgeben ich.e aus der OS-job erfolgreich war. Also ich bin immer "0" aus test.sh für alle anderen Zustand, also test1 .sh wird immer aufgerufen, unabhängig davon ob die verarbeitete Datei ist fehlgeschlagen usw.Pls Beratung mit der return-code

test.sh
FILES=/export/home/input.txt
cat $FILES | nawk -F '|' '{print $1 "|" $2 "|" }' $f > output.unl
if [[ -f $FILES ]]; 
then if [[ $? -eq 0 ]]; then
 echo "File successfully" 
else
 echo "File not successfully"
 exit 1 
fi
 else 
echo "Input file doesn't exists in directory" exit 1 fi

========================================================================

test1.sh
 echo "Input file exists in directory"

test2.sh

echo "In test2 script"
./test.sh
echo "return code" $?
if [[ $? -eq  0 ]]; then
 echo "inside"
./test1.sh
fi

test.sh scheint nicht richtig formatiert (siehe Letzte Zeile). Auch, wie ist $FILES initialisiert? Weiter -, Prüf - $? im test.sh scheint überflüssig, da Sie bereits die Tests für die Existenz von $FILES mit -f.
Ihre test.sh ist syntaktisch ungültig - der nawk Programm fehlt eine schließende Apostroph und die Letzte Zeile wird nicht funktionieren, es sei denn, Sie setzen mindestens fi auf einer separaten Zeile. Wenn Sie in der Tat haben exit 1 auf der gleichen Linie wie Ihre echo - Anweisung, dann wäre es einfach, sich ein anderes Ausgabe-string, die erklären, warum der exit-code ist nicht gesetzt.
Diese Art von problem geht oft Weg, wenn Sie zu vermeiden, explizit zu testen $?. Statt testen $? überprüfen Sie die tatsächlichen Anruf. In anderen Worten, schreiben Sie einfach if ./test.sh; then echo inside; ...; fi
Der Beispiel-code, den Sie gezeigt haben, ist eindeutig nicht in den eigentlichen code (tun Sie wirklich, "echo ... exit 1 fi", die aus der if unverschlossen und nur Echos exit 1 anstatt der Ausführung eines exit?), also die Antwort ist rein spekulativ, aber ich denke, vielleicht ist Ihr exit wird aufgerufen innerhalb einer subshell.

InformationsquelleAutor user3326101 | 2014-02-20

Schreibe einen Kommentar