Supportnet / Forum / Linux
Shell Script mit sed-Aufruf
Frage
Hallo!
Habe mir ein Shell-Skript geschrieben, welches mir über Gnome angeklickte Videos usw. mit den richtigen Voreinstellungen öffnen soll.
Also hatte ich zunächst folgendes Skript:
[code]
#! /bin/sh
mplayer -zoom -framedrop -loop 0 -sid 0 -font ~/.mplayer/font/arial40/font.desc $1[/code]
Das funktionierte auch ganz prima, zumindest solange, wie der Pfad keine Leerzeichen, eckige Klammern oder runde Klammern enthielt. Dann kam die Meldung, dass die Datei nicht gefunden werden konnte. Logisch, da vor Leerzeichen und den Klammern ein Backslash stehen muss.
Also habe ich das Skript folgendermaßen verändert:
[code]#! /bin/sh
echo $* > /tmp/.mplayer_file
X=´sed -e ´s/ /\\ /g´ -e ´s/\[/\\[/g´ -e ´s/\]/\\]/g´ -e ´s/(/\\(/g´ -e ´s/)/\\)/g´ /tmp/.mplayer_file´
mplayer -zoom -framedrop -loop 0 -sid 0 -font ~/.mplayer/font/arial40/font.desc $X[/code]
In kurz: Der sed setzt vor jedes Leerzeichen und jede Klammer einen Backslash.
Aber das funktioniert so nicht!
Wenn ich den sed-Befehl direkt in die Konsole reinhacke, dann klappt das prima, die Ausgabe ist, wie ich sie mir vorstelle.
Aber wenn das im Skript drinsteht, kommt immer die Meldung:
[code]user@rechner:~$ amplayer.sh [Hurra] Film - 01.avi
/usr/bin/amplayer.sh: line 7: /\: Datei oder Verzeichnis nicht gefunden[/code]
Zeile 7 ist die mit dem sed drin...
sed allein auf der Konsole zeigt dies als Ausgabe:
[code]\[Hurra\]\ Film\ -\ 01.avi[/code]
Was mache ich falsch???
Wie gesagt... steht der sed allein auf der Konsole, dann klappt das...
mfg bored
Antwort 1 von bored
Ok, alles klar. Ich bin DOOF!
Nur weil es für den alias-Befehl keinen manual-Eintrag gibt, heißt das nicht, das man ihn nicht auch verwenden kann......
Trotzdem würde mich interessieren, warum der sed in den beiden Situationen unterschiedliche Dinge tut...
Nur weil es für den alias-Befehl keinen manual-Eintrag gibt, heißt das nicht, das man ihn nicht auch verwenden kann......
Trotzdem würde mich interessieren, warum der sed in den beiden Situationen unterschiedliche Dinge tut...
Antwort 2 von bored
So, für alle die es interessiert - das finale Skript ;-)
#!/bin/bash
echo $* > ~/.mplayer/temp_file
chmod 777 ~/.mplayer/temp_file
sed -e ´s/ /\\ /g´ -e ´s/\[/\\[/g´ -e ´s/\]/\\]/g´ -e ´s/(/\\(/g´ -e ´s/)/\\)/g´ ~/.mplayer/temp_file > ~/.mplayer/temp_playlist
chmod 777 ~/.mplayer/temp_playlist
read playfile < ~/.mplayer/temp_playlist
echo $playfile
mplayer -zoom -framedrop -sid 0 -loop 0 -font ~/.mplayer/font/arial40/font.desc $playfileAntwort 3 von thomasn1975
Hm, alternativ hätte es auch gereicht, die $1 in "$1" zu schreiben.
Antwort 4 von bored
Zitat:
alternativ hätte es auch gereicht, die $1 in "$1" zu schreiben.
alternativ hätte es auch gereicht, die $1 in "$1" zu schreiben.
Ähm... wie meinen?
Antwort 5 von thomasn1975
Statt
schreibst Du einfach
also die $1 in doppelten Anführungszeichen.
oder für mehrere Dateien
Nachzulesen in der manpage zur bash unter "Special Parameters".
Gruß
Thomas
#! /bin/sh
mplayer -zoom -framedrop -loop 0 -sid 0 -font ~/.mplayer/font/arial40/font.desc $1schreibst Du einfach
#! /bin/sh
mplayer -zoom -framedrop -loop 0 -sid 0 -font ~/.mplayer/font/arial40/font.desc "$1"also die $1 in doppelten Anführungszeichen.
oder für mehrere Dateien
#! /bin/sh
mplayer -zoom -framedrop -loop 0 -sid 0 -font ~/.mplayer/font/arial40/font.desc "$@"Nachzulesen in der manpage zur bash unter "Special Parameters".
Gruß
Thomas
Antwort 6 von thomasn1975
Ups, selbst nach 3x Vorschau betrachten fällt es mir erst nach dem Posten auf:
Die erste Zeile muss natürlich immer
lauten.
Noch´n Gruß
Thomas
Die erste Zeile muss natürlich immer
#! /bin/bashlauten.
Noch´n Gruß
Thomas

