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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du bist überschreiben
$?
wenn Sie es im echo nach, dass, es enthält den exit-code von echo selbst. In einer Variablen gespeichert, um dies zu vermeiden.Bearbeitet, um hinzufügen: es ist schwer zu sagen, was Sie wollen aus test.sh wie der code eingefügt ist unvollständig und muss nicht selbst laufen. Es sieht wie du meintest das
cat
imif
, da es sonst zu Fehlern bei der Eingabe-Datei fehlt, und Ihre$?
test tut nichts. Also, ich neu geordnet wie folgt:Habe ich geändert das awk-Skript zu zeigen, die Bedingungen der Arbeit: nun, wenn ich das Wort
bad
im input.txt sehen Sie die "Datei-Verarbeitung fehlgeschlagen" angezeigt, ansonsten sehen Sie den Erfolg, entfernen Sie die Datei, und Sie sehen die Eingabe-Datei nicht vorhanden Meldung.Ich nehme an, du meinst die else-Bedingungen in test.sh. Ich habe aktualisiert die Antwort zu fixieren, dass man auch, aber es ist schwer zu sagen, was Sie versuchten zu tun es.
Alle -ich habe das Skript aktualisiert haben, um zu verstehen, was ich Tue, aber das hat eigentlich alles nicht viel Sinn.Wenn cat-Befehl ist der Erfolg, es geht um die Rückgabe "0".Meine Frage, ob wenn es geht zu jedem der else-block, warum es immer noch umstimmen "0".
Ihre neueste update macht immer noch keinen Sinn. Jetzt gibt es eine variable $f, ist nie festgelegt, und der code immer noch nicht, auch ausführen, weil der syntax-Fehler durch fehlende Zeilenumbrüche. Aber wenn ich einfügen von newlines in den Orten, die Ihr code nicht return 0 else-Blöcken, gibt Sie 1 zurück. Entweder den code in Ihrem test2.sh ist immer noch falsch (wie ich sagte), oder es gibt noch mehr code hast du nicht gepostet, die ist auch falsch.
sind nicht immer die Rahmen.ich bin nämlich immer noch der Rückkehr der "O" in all den else-block
InformationsquelleAutor bazzargh