staging.inyokaproject.org

Umgang mit Leerzeichen in variablem Dateipfad

Status: Ungelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

kopeter

Avatar von kopeter

Anmeldungsdatum:
9. Juli 2013

Beiträge: 124

Ich habe mir ein Skript, dass mir alle Medien-Dateien in einem Ordner abspielen soll aus dem Netz kopiert und versuche nun es so zu modifizieren, dass es tut was es soll. Das Script nutze ich allerdings nicht auf Ubuntu, sondern auf Raspbian.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/bin/sh
 
# get rid of the cursor so we don't see it when videos are running
setterm -cursor off
 
# set here the path to the directory containing your videos
VIDEOPATH="/media/usb/videos/" 
 
# you can normally leave this alone
SERVICE="omxplayer"
 
# now for our infinite loop!
while true; do
        if ps ax | grep -v grep | grep $SERVICE > /dev/null
        then
        sleep 1;
else
        for entry in $VIDEOPATH/*
        do
                clear
                omxplayer --no-osd -b -o hdmi $entry > /dev/null
        done
fi
done

Das Problem nummer eins ist: ich habe meine Videos schon benannt... mit Leerzeichen im Dateinamen 🙄 gibt es einen Trick der das auftretende Problem (keine \ vor den Leerzeichen) lösen kann? ggf. auch mit anderen Sonderzeichen, welche ja eventuell auch mal auftreten können.

Problem Nummer zwo: das Script arbeitet in einem Endlosloop, was es eigentlich nicht soll. klar kann ich es einfach killen, aber vermutlich gibts da was eleganteres 😀

bitte entschuldigt die Newbfragen, das sind meine ersten Schritte mit scripten ☺

Gruß kopeter

Moderiert von rklm:

Distribution entfernt

Marc_BlackJack_Rintsch Team-Icon

Ehemalige
Avatar von Marc_BlackJack_Rintsch

Anmeldungsdatum:
16. Juni 2006

Beiträge: 4735

@kopeter: Dazu musst Du die Variable die Leerzeichen enthalten kann für die Expansion in doppelte Anführungszeichen setzen, damit die Schell nach der Ersetzung nicht „word splitting“ mit dem ersetzten Wert betreibt.

Bei $SERVICE und $VIDEOPATH ist das nicht notwending, aber shaden tut es auch nicht.

Die Einrückung stimmt übrigens nicht mit der Programmstruktur überein. Man sollte so etwas konsistent machen, denn nur dann hilft es wirklich Programme leichter zu verstehen.

Wenn Du keine Endlosschleife haben möchtest, dann programmier halt keine Endlosschleife. Mehr kann man nur sagen wenn Du verrätst unter welchen Umständen die Schleife denn abgebrochen werden soll. Und wenn Du das sagen kannst, dann müsstest Du das eigentlich auch programmieren können. Falls nicht: Woran hängt es denn konkret?

Anstelle von der ps/grep-Kombination bietet sich eventuell pgrep als Alternative an.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#!/bin/sh
 
# get rid of the cursor so we don't see it when videos are running
setterm -cursor off
 
# set here the path to the directory containing your videos
VIDEOPATH='/media/usb/videos/' 
 
# you can normally leave this alone
SERVICE='omxplayer'

# now for our infinite loop!
while true
do
        if pgrep "$SERVICE" > /dev/null
        then
                sleep 1
        else
                for entry in "$VIDEOPATH/"*
                do
                        clear
                        omxplayer --no-osd -b -o hdmi "$entry" > /dev/null
                done
        fi
done
Antworten |