Führen Sie einen Shell-Befehl aus einem Shell-Skript aus, ohne anzuhalten, wenn ein Fehler auftritt
In einer Art try/catch-form, die ich ausführen möchten, eine bash, die nicht anhalten, wenn ein Fehler Auftritt.
Den spezifischen bash:
#!/bin/sh
invoke-rc.d tomcat stop
rm -fr /var/webapps/
cp -R $WEBAPP /var/webapps/
invoke-rc.d tomcat start
Ich will exec "invoke-rc.d tomcat stop" und selbst wenn der Tomcat nicht läuft, weiterhin führen Sie die andere bash-Befehle.
InformationsquelleAutor der Frage JorgeO | 2009-07-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen:
Ein wenig hintergrund:
Den real Lösung ist ein Blick auf die tomcat-init-Skript zu sehen, wie es weiß, wenn tomcat läuft 🙂 dieser Weg, werden Sie nicht belästigen, Sie nicht unnötig.
Sehen dieser Beitrag auf der anderen Vorschlag zu unset /set +e. Während es lösen würde Ihr unmittelbares problem, Sie können feststellen, dass Sie benötigen, die vor kurzem unset Verhalten in Ihrem eigenen Skript, vor allem, da Sie Dateien kopieren.
Dies ist einer der größten Gründe, warum true und false gemacht wurden, anders als die Makefiles Verhalten sich wie erwartet, in einer Vielzahl von build-Umgebungen.
Auch set +e ist nicht ganz tragbar, d.h. einige Versionen von Solaris (und auch Dash) .. aber ich bezweifle, dass dies ein Problem für Sie.
InformationsquelleAutor der Antwort Tim Post
Deaktivieren Sie die "sofort beenden" - option mit
set +e
führen Sie Ihren Befehl, dann Optional wieder aktivieren mitset -e
:Sehen Abschnitt 4.3.1 der Bash-Handbuch für eine Erklärung der
set
vordefiniert und alle Ihre verschiedenen Optionen (von denen gibt es viele).InformationsquelleAutor der Antwort Adam Rosenfield
Verwenden bash den Befehl setum vorübergehend deaktivieren Sie die Ausfahrt-auf-ungleich Verhalten.
InformationsquelleAutor der Antwort
Wenn invoke-rc.d tomcat stop ist die einzige Sache, die Sie schützen wollen, vor Versagen, vielleicht invoke-rc.d tomcat stop || true kann es tun? Das sollte nie ein " non-zero exit status.
InformationsquelleAutor der Antwort Vatine
Versuchen Sie umleiten den standard-error in eine Datei ...so etwas wie 2> myerror.
InformationsquelleAutor der Antwort Vaibhav