Supportnet Computer
Planet of Tech

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...

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 $playfile


Antwort 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.

Ähm... wie meinen?

Antwort 5 von thomasn1975

Statt

#! /bin/sh
mplayer -zoom -framedrop -loop 0 -sid 0 -font ~/.mplayer/font/arial40/font.desc $1


schreibst 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

#! /bin/bash


lauten.

Noch´n Gruß
Thomas

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: