Ich weiß, dass set -e
das mein Freund ist, um bei einem Fehler zu beenden. Aber was tun, wenn das Skript bezogen wird, z. B. wenn eine Funktion über die Konsole ausgeführt wird? Ich möchte die Konsole nicht bei einem Fehler schließen, sondern nur das Skript stoppen und die Fehlermeldung anzeigen.
Muss ich die $ überprüfen? von jedem Befehl von Hand, um dies zu ermöglichen?
Hier ein Beispielskript myScript.sh
, um das Problem zu zeigen:
#!/bin/sh
set -e
copySomeStuff()
{
source="$1"
dest="$2"
cp -rt "$source" "$dest"
return 0
}
installStuff()
{
dest="$1"
copySomeStuff dir1 "$dest"
copySomeStuff dir2 "$dest"
copySomeStuff nonExistingDirectory "$dest"
}
Das Skript wird folgendermaßen verwendet:
$ source myScript.sh
$ installStuff
Dadurch wird nur die Konsole geschlossen. Der von angezeigte Fehler cp
geht verloren.
set -e
die errexit
Option in der Shell festgelegt. Beim Aufrufen der Funktion cp
schlägt die fehl und die Shell wird für mich beendet.
#!
und set -e
auf die aufrufende Shell angewendet wird, gilt dies auch für alle nachfolgenden Befehle.
()
wenn Shell-Funktionen aufgerufen werden.
${dest}
und ${source}
sind immer noch nicht zitiert und enthalten Benutzereingaben. Ich bin hier etwas wählerisch mit Ihnen, aber Sie müssen sie in Ihrem Skript auf Ihrem Computer zitieren, sonst funktionieren einfache Dinge wie das Kopieren von Dateien mit Leerzeichen in ihren Namen nicht. Es tut uns leid. Ich versuche nur, konstruktives Feedback zu geben.
cp
Fehler beim Beenden und Beenden mit 1 Exit-Code.