staging.inyokaproject.org

Per Skript mehrere Dateien in (Unter-)Verzeichnissen mit Leerzeichen öffnen

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

thom_raindog

Avatar von thom_raindog

Anmeldungsdatum:
20. Mai 2005

Beiträge: 2848

Salue,

so, mal für ganz grobe Anfänger...

Ich will n Skript schreiben, dass ne Reihe Dateien öffnet. Ich brauch für meine Arbeit einfach 4 Dateien offen, die an 2 festen Stellen liegen, sagen wir mal an

/home/ich/Unterverzeichnis mit Leerzeichen

und

/home/ich/Unterverzeichnis mit Leerzeichen/und noch ein Unterverzeichnis

Darunter liegen jetzt je 2 Dateien. Es gelingt mir schlichtweg nicht, die Pfadangaben so zu schreiben, dass die Bash das Skript dann auch ausführen kann.

Erster Versuch: Angabe des Pfades als Variable (samt ""), dann per cd dorthin, 2 Dateien öffnen und per cd in den tieferen Pfad, Dateien öffnen. Bei ersten cd bricht schon alles auseinander. Aktueller Versuch (nach 20 Abwandlungen von Test 1): Zwei Variablen A und B, Dateien per

1
soffice $A/Dateiname

öffnen. Die Bash schneidet den Dateinamen am ersten Leerzeichen ab, trotz Anführungszeichen.

Kann mir da jemand auf die Sprünge helfen?

Bearbeitet von ChickenLipsRfun2eat:

Bitte wähle in Zukunft einen aussagekräftigen Titel!

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 11278

Einfach konsequent quoten:

1
2
A="/home/ich/Unterverzeichnis mit Leerzeichen"
soffice "$A/Dateiname"

Wenn man viele Dateien hat, kann es sich lohnen das generischer zu lösen:

1
2
3
4
5
6
7
workdir_a="/home/ich/Unterverzeichnis mit Leerzeichen"
workdir_b="/home/ich/Unterverzeichnis mit Leerzeichen/und noch ein Unterverzeichnis"
files=("${workdir_a}/filename1" "${workdir_a}/filename2" "${workdir_b}/filename3" "${workdir_b}/filename4")
for f in "${files[@]}"
do
    xdg-open "$f"
done

Doc_Symbiosis

Avatar von Doc_Symbiosis

Anmeldungsdatum:
11. Oktober 2006

Beiträge: 4453

Naja, im Skript musst Du dann auch die Anführungszeichen verwenden.

soffice "$A/Dateiname"

Es gibt übrigens das sehr praktische Programm shellcheck, womit Du dein Skript auf solche Probleme prüfen kannst.

Und in Zukunft verwende bitte einen aussagekrätigereren Titel für das Thema.

thom_raindog

(Themenstarter)
Avatar von thom_raindog

Anmeldungsdatum:
20. Mai 2005

Beiträge: 2848

Ahja, die Variable muss bei ihrer Benutzung auch gequoted werden. Verstehe. Tatsächlich lüppt dat dann. Super Tipp auch mit dem shellcheck, merci dafür. Und sorry für den depperten Titel, da sollte eigentlich noch mehr stehen, aber da ich zwischendurch abgelenkt wurde (blöde Arbeit), hab ichs verschwitzt.

Danke für die hilfreichen Antworten.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

seahawk1986 schrieb:

1
2
3
4
5
6
7
workdir_a="/home/ich/Unterverzeichnis mit Leerzeichen"
workdir_b="/home/ich/Unterverzeichnis mit Leerzeichen/und noch ein Unterverzeichnis"
files=("${workdir_a}/filename1" "${workdir_a}/filename2" "${workdir_b}/filename3" "${workdir_b}/filename4")
for f in "${files[@]}"
do
    xdg-open "$f"
done

Das Array ist an der Stelle aber überflüssig. Wenn man das weglässt, dann kann man das Skript auch mit der sh ausführen.

1
2
3
4
5
6
7
workdir_a="/home/ich/Unterverzeichnis mit Leerzeichen"
workdir_b="/home/ich/Unterverzeichnis mit Leerzeichen/und noch ein Unterverzeichnis"

for f in "${workdir_a}/filename1" "${workdir_a}/filename2" "${workdir_b}/filename3" "${workdir_b}/filename4"
do
    xdg-open "$f"
done
Antworten |