Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
bash-scripting: externe Befehle mit " ausführen
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1668

PostPosted: Wed Dec 12, 2012 7:11 pm    Post subject: bash-scripting: externe Befehle mit " ausführen Reply with quote

Hi, ich versuch gerade einen wrapper für ffmpeg zu bauen, der mir Tipparbeit sparen soll. ich hab nur ein kleines Problem:
Ich möchte die übergebenen Dateinamen in "" setzen, damit diese auch Leerzeichen enthalten können.

ich baue mir den Befehl so zusammen (ffmpeg-optionen rausgekürzt)
Code:

COMMAND="ffmpeg -i \"$infile\" [...] \"$outfile\""

und zum ausführen dann einfach nur
Code:

$COMMAND


leider funktioniert das nicht. ffmpeg interpretiert die " als mit zum dateinamen gehörig (anscheinend). Fehlermeldung: "test.mkv": No such file or directory

wenn ich
Code:
echo $COMMAND

mache und die Ausgabe kopiere und Einfüge und asuführe, dann funktioniert es.

wie muss ich jetzt die Anführungszeichen und wo escapen, oder was auch immer ich machen muss?

Schönen Dank
Christian
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3919
Location: Hamburg

PostPosted: Wed Dec 12, 2012 7:50 pm    Post subject: Reply with quote

Tja, wenn es nur Leerzeichen sind, müßtest Du evtl. einfach die escapen mittels
Code:
echo "mi au" | sed 's/ /\\ /g'
, aber diese Befehlssequenze bei Deiner Lösung einzubauen läöuft auch auf die backslash/Escape-Hölle hinaus, fürchte ich.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1668

PostPosted: Wed Dec 12, 2012 8:00 pm    Post subject: Reply with quote

hm, wäre eine Möglichkeit, find ich aber unschön (nicht bös gemeint) weil das ja nur für Leerzeichen geht bzw ich bei allen anderen zeichen die escaped werden müssen das einzeln machen muss.

PS: sollte das nicht nur ein \ sein innerhalb von ' '? ;)
Back to top
View user's profile Send private message
bell
Guru
Guru


Joined: 27 Nov 2007
Posts: 508

PostPosted: Wed Dec 12, 2012 8:13 pm    Post subject: Reply with quote

Ich habe mir folgendes angewöhnt:
Code:
function do_ffmpeg(){
   infile="$1"
   outfile="$2"
   ffmpeg -i "$infile" [...] "$outfile"
}

 do_ffmpeg inpputfile.avi outputfile.mpg


Damit umgeht man das Problem und der Code ist lesbarer.
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1668

PostPosted: Wed Dec 12, 2012 8:44 pm    Post subject: Reply with quote

ok, danke, wenn man den befehl nicht von einer variable aus ausführt funktionierte es, wie es soll.
verstehen tu ich es aber nicht....
Back to top
View user's profile Send private message
toralf
Developer
Developer


Joined: 01 Feb 2004
Posts: 3919
Location: Hamburg

PostPosted: Wed Dec 12, 2012 9:13 pm    Post subject: Reply with quote

Christian99 wrote:
PS: sollte das nicht nur ein \ sein innerhalb von ' '? ;)
Nein, der Ausdruck ist schon korrekt so.
Wie jedoch schon bemerkt, es geht halt im dargestellten Beispiel nur für Leerzeichen.

Was ich mich jedoch frage, ist, ob geschweifte Klammern Dir helfen könnten, also etwas in der Art
Code:
COMMAND="ffmpeg ... ${infile} "
Back to top
View user's profile Send private message
bell
Guru
Guru


Joined: 27 Nov 2007
Posts: 508

PostPosted: Wed Dec 12, 2012 9:54 pm    Post subject: Reply with quote

Das Problem ist nicht die Maskierung, sondern die anschließende Interpretation. Wenn Du dann $COMMAND ausführst, interpretiert die Shell die Zeichenkette nicht mehr. Die " werden also nicht mehr entfernt und er findet keine Datei die mit " beginnt und endet. Die Lösung ist "eval".
Beispiel:
Code:
COMMAND="ls \"$HOME\""

echo $COMMAND
ls "/home/meinuser"

###soweit sogut

$COMMAND
ls: Zugriff auf "/home/meinuser" nicht möglich: Datei oder Verzeichnis nicht gefunden

### Klar, mit " gibt es auch nicht.

eval $COMMAND
;)
Back to top
View user's profile Send private message
Christian99
Veteran
Veteran


Joined: 28 May 2009
Posts: 1668

PostPosted: Fri Dec 14, 2012 2:45 pm    Post subject: Reply with quote

Ok, vielen Dank, eigentlich hätt ich das wissen müssen, aber wenn man nicht regelmäßig shell-skripte schreibt ... ;)
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum