Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
speefak
- Beiträge: 532
- Registriert: 27.04.2008 13:54:20
Beitrag
von speefak » 10.09.2023 17:53:46
Warum wird der Pfad zwar angezeigt aber nicht von cd geöffnet ?
Code: Alles auswählen
#!/bin/bash
LastModifiedDir=$(find -type d -exec ls -td {} + | grep "/" | head -n 1)
printf "open $LastModifiedDir \n"
ls -l "$LastModifiedDir"
cd "$LastModifiedDir"
geeb ich den cd befehl mit dem aus den o.g. Script angezeigten Pfad direkt in der Shell ein funktioniert es
-
tobo
- Beiträge: 2362
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 10.09.2023 18:45:08
Der Verzeichniswechsel durch cd findet schon statt, da du durch das Skript aber eine neue Shell startest, nur in dieser neuen Shell. Starte mal mittels source oder . das Skript, dann siehst du das Ergebnis auch in der aufrufenden Shell.
-
TuxPeter
- Beiträge: 2020
- Registriert: 19.11.2008 20:39:02
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von TuxPeter » 10.09.2023 18:56:12
Deine Zuweisung zu "Last..." stirbt bei mir als shell-Befehl beim "exec ls ..."
Code: Alles auswählen
LastModifiedDir=$(find -type d -exec ls -td {} + | grep "/" | head -n 1)
find: Prozess ‘ls’ wurde durch das Signal 13 abgebrochen.
find: Prozess ‘ls’ wurde durch das Signal 13 abgebrochen.
find: Prozess ‘ls’ wurde durch das Signal 13 abgebrochen.
Empfehle, das in Einzelschritte zu zerlegen.
-
tobo
- Beiträge: 2362
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 10.09.2023 19:14:28
TuxPeter hat geschrieben:
Deine Zuweisung zu "Last..." stirbt bei mir als shell-Befehl beim "exec ls ..."
Das hat mit dem Problem aber nichts zu tun, der Pfad wird zugewisen. Das head will nur den ersten Satz und beendet die Pipe, das find (und damit das ls) will aber mehr liefern. Siehe dazu `man 7 signal': "SIGPIPE - Broken pipe: write to pipe with no readers; see pipe(7)"
Edit:
Die Fehlerausgabe könnte man unterdrücken:
Code: Alles auswählen
LastModifiedDir=$(find -type d -exec ls -td {} + 2>/dev/null | grep "/" | head -n 1)
-
speefak
- Beiträge: 532
- Registriert: 27.04.2008 13:54:20
Beitrag
von speefak » 10.09.2023 20:39:12
Mit Debian 12 gibt keine Fehlermeldung mit Debian 11 schon.
Es sollte ein kleines Script werden um in den Backupordnern zu navigieren. Sprich aus dem Backup dcroot der webseite den letzten ordner öffnen und dann kurze abfrage datein anzeigen oder restore script ausführen
DirStruktur :
/backupDCroot/daily/website_name-2023-09-10_20:30
/backupDCroot/weekly/website_name-2023-09-10_20:30
/backupDCroot/monthly/website_name-2023-09-10_20:30
Um nicht immer mit cd durch die Verzeichnisse zu zappen soll halt das zuletzt modifizierte Verzeichnisse mit dem Befehl geöffnet werden. Am besten als direkter absoluter Pfad ( /mnt/storage
/backupDCroot/daily/website_name-2023-09-10_20:30 ). Das script sollte unter /usr/local/bin liegen um es einfach per shellcmd ausführen zu können ohne . ./script.sh sonder einfach mit script.sh.
-
tobo
- Beiträge: 2362
- Registriert: 10.12.2008 10:51:41
Beitrag
von tobo » 10.09.2023 20:51:08
speefak hat geschrieben: 10.09.2023 20:39:12
Das script sollte unter /usr/local/bin liegen um es einfach per shellcmd ausführen zu können ohne . ./script.sh sonder einfach mit script.sh.
Das geht nicht - von der Kind-Shell kannst du nichts in die Eltern-Shell übertragen. Wenn dich source so dermaßen stört, dann entwerfe das halt als Funktion.
-
speefak
- Beiträge: 532
- Registriert: 27.04.2008 13:54:20
Beitrag
von speefak » 11.09.2023 04:13:48
Das habe ich mir fast gedacht. Alternativ wäre ein Stringexport in eine Datei noch denkbar.