PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Anfängerproblem mit kleinem Skript



ludger
11.08.21, 15:25
Hallo,

ich habe hier 2 kleine Skripte, mit denen ich bisher jeweils ein Verzeichnis mit einem Verzeichnis auf einem USB-Stick synchronisiert habe, in denen ich fast täglich Änderungen vornehme, neue Dokumente erstelle usw.

Unabhängig davon, dass Ihr bestimmt viele Stellen in den Skripten findet, die ein Profi anders schreiben würde, grübel ich zur Zeit über die Frage, warum ein Befehl in einem Skript anstandslos funktioniert und als Ergängung in einem anderen Skript nicht funktioniert.

Es handelt sich um folgenden Befehl:

rsync -a -u -v -P --delete /media/data1000/Haus/Rezepte-und-Küche/* /media/ludger/persistence/Rezepte-und-Küche >> /home/ludger/bin/rezepte.log &&

Im ersten Skript "RezepteSichern" funktioniert das anstandslos.
In dem zweiten Skript "poweroff07", das ich um diesen Befehl ergänzen wollte, funktioniert der Befehl nicht, außerdem funktioniert in "poweroff07" jetzt auch das unmounten des persistenten Speicherbereichs meines Debian-Live-USB-Sticks nicht mehr, während der umount-Befehl für die andere Partition des Sticks funktioniert.

Da ich nicht viel Ahnung von Linux habe, sondern mir alles Stück für Stück selbst beibringe, bin ich seit einigen Stunden ziemlich ratlos. Vielleicht könnte sich jemand mal meiner beiden Machwerke erbarmen und einen Blick darauf werfen?
(Natürlich haben die Skripte hier die Endung *.sh)

Vielen Dank
ludger

Edit: Vergessen - ich habe ein Debian Buster.

nopes
11.08.21, 16:02
Dein Problem wird mit den Logik-Operatoren zu tun haben - && sa https://linux.die.net/man/1/bash
Genauer dort den Bereich: Lists

Irgendein Befehl wird schief gehen

cmd1 arg1 arg2 && cmd2 arg1 arg2

cmd2 wird nur gestartet wenn cmd1 erfolgreich war, da wird also was nicht passen, in zweiten IF verwendest du ja recht viele Befehle


Du kannst, eine sogenannte TRAP erstellen, um das Problem zu behandeln - sa https://linux.die.net/man/1/bash dort trap [-lp] [[arg] sigspec ...]
Du kannst, dein Skript im Debug Modus ausführen lassen, wieder die MAN zur BASH, dort nach set [--abefhkmnptuvxBCEHPT] [-o option] [arg ...] bzw set [+abefhkmnptuvxBCEHPT] [+o option] [arg ...] suchen.
Du kannst die exec Anweisung am Anfang mal auskommentieren und dich anhand der Fehlermeldungen zum Problem vorarbeiten - besser ist, wenn du sowas am jeweiligen Befehl machst, pauschal ist schlecht, du merkst gerade warum.

ludger
11.08.21, 16:54
Vielen Dank!

Das Auskommentieren der exec-Anweisung hat es schon gebracht. Ich bekam die Fehlermeldung, dass der andere USB-Stick, von dem auch ein paar Daten synchronisiert werden sollen, nicht mehr gemountet war.


rsync: change_dir "/media/ludger/Intenso16GB1" failed: No such file or directory (2)

Vielleicht habe ich ein Mal aus Versehen den falschen Stick abgezogen, die sehen beide gleich aus.

Danach lief das Skript auch mit dem neuen, zusätzlichen Befehl anstandslos durch und auch ein paar Test-Dateien wurden synchronisiert!

In die man bash muss ich mich die nächsten Wochen mal vertiefen, auch wenn das auf Englisch nicht so einfach ist! Da hat man ja Wochen lang was zu lesen ...!

Danke und Grüße
ludger