Echo-Befehl als Command-Test nutzen?

XamBonX

Captain
Registriert
Nov. 2002
Beiträge
3.101
Ich will meinen Skript testen, ob er wirklich jeden Befehl, Zeile für Zeile ausführt im Sinne von:

cp /home/admin/a.zip /home/tmp/a.zip > log.txt echo "cp befehl ausgeführt"

Aber so in der Art geht das nicht, gibt's da ne Möglichkeit?
 
Zuletzt bearbeitet:
Bau ins Script Ausgaben ein, die an bestimmten Punkten etwas ausspucken. Und dann kannst du im Log-File überprüfen, ob diese Ausgaben auftauchen.
 
hätte es jetzt wie folgt ergänzt:
| Out-File -FilePath c:\temp\echo.txt -Append

sry. ging von Powershell aus :-)
 
Führe das Programm/Skript im Vordergrund aus und nicht im Hintergrund. Dann kannst du live sehen wo dein Skript gerade ist sofern es nicht zu schnell für dich abläuft. Alternativ lies dich in die Return/Exit Codes unter Linux ein, die kannst nach jedem Schritt abfragen und so checken ob dies korrekt lief oder nicht.
 
SoDaTierchen schrieb:
Bau ins Script Ausgaben ein, die an bestimmten Punkten etwas ausspucken. Und dann kannst du im Log-File überprüfen, ob diese Ausgaben auftauchen.
Habe ich, nach jedem Command ein touch blablub-command-getan

Aber hat er den nun wirklich getan? Er kann den command vor touch ja ausgeführt haben, und es gab ne Meldung und dann ging es weiter zum touch, wo er sagt, command vorher ausgeführt, aber nicht ob erfolgreich oder nicht.

Also z.B.
cp /home/admin/a.zip /home/tmp/a.zip
touch /home/log/cp_a-zip_getan
nächster befehl
touch vom nächsten befehl
etc.

Muss aber ja nicht klappen der cp-Command, z.B. wenn a.zip fehlt oder /home/tmp/ nicht vorhanden ist, und das hätte ich dann gern im Log.
 
Befehle die nicht ausgeführt werden können führen zu einer Fehlermeldung und zum Abbruch des Scripts.
Ansonsten schau dir tee an bzw. prüfe die Rückgabe deiner Befehle per $?:

cp ...
if [ $? -ne 0 ]; then
echo "error" >> log.txt
else
echo "alles fein" >> log.txt
fi
 
Groug schrieb:
Befehle die nicht ausgeführt werden können führen zu einer Fehlermeldung und zum Abbruch des Scripts.
Dann hat sich das ja erledigt. Weil alle touch erstellt Dateien vorhanden sind, somit ist jeder Befehl erfolgreich durchgegangen. Danke.
 
Eben. Dafür gibt es set -x zum Aktivieren und set +x zum Deaktivieren. Alternativ auch via bash -x $script für ein Script setzen.

edit:

Wenn du bei jeglichen Fehlern abbrechen willst, gibts auch pipefail via set -euf -o pipefail. Ggf. auch via shellcheck gegenprüfen.
 
XamBonX schrieb:
Weil alle touch erstellt Dateien vorhanden sind, somit ist jeder Befehl erfolgreich durchgegangen
Hier aufpassen: Nicht jeder Fehler führt zum Scriptabbruch, viele führen zu einer Fehlermeldung und das Script wird fortgesetzt. Im Zweifel kann man aber in der Doku nachlesen oder ausprobieren, was passiert, wenn ein Befehl mit unglücklichen Argumenten gefüttert wird.

Oder du baust an den Anfang deines Scriptes ein set -e, dann wird es nach jedem Fehler sterben, auch wenn das gar nicht so vorgesehen war. Dann ist nämlich ein erfolgreicher "touch" wirklich eine Garantie, dass kein Fehler aufgetreten ist.
 
Und genau das habe ich befürchtet. set -e solls sein! Danke! Test hat ergeben, dass alles lupt!
 
  • Gefällt mir
Reaktionen: SoDaTierchen
Zurück
Oben