bash: Quoting beim Programmaufruf aus Variable

12/07/2016 - 17:59 von Siegfried Schmidt | Report spam
Hallo,

wie muss ein Programmaufruf zusammengebaut werden, damit gequotete
Parameter zusammenbleiben?

#!/bin/bash
COMMAND="/pfad/zum/programm -L -s \"$OPTION\" \"$DATEI\""
$COMMAND

schlàgt fehl, wenn $OPTION Leerzeichen enthàlt. Das aufgerufene Programm
bekommt die Teile von $OPTION als getrennte Parameter zu Gesicht.

Ein manueller Aufruf des Inhalts von $COMMAND funktioniert dagegen.


Siegfried

Diese Nachricht kann zukunftsgerichtete Aussagen beinhalten, diese sind
mit Risiken und Ungewissheiten verbunden und basieren auf gegenwàrtigen
Erwartungen. Die tatsàchlichen Ereignisse können daher wesentlich von den
Darstellungen abweichen.
 

Lesen sie die antworten

#1 Rainer Weikusat
12/07/2016 - 21:35 | Warnen spam
Siegfried Schmidt writes:
wie muss ein Programmaufruf zusammengebaut werden, damit gequotete
Parameter zusammenbleiben?

#!/bin/bash
COMMAND="/pfad/zum/programm -L -s \"$OPTION\" \"$DATEI\""
$COMMAND

schlàgt fehl, wenn $OPTION Leerzeichen enthàlt. Das aufgerufene Programm
bekommt die Teile von $OPTION als getrennte Parameter zu Gesicht.



Die shell interpretiert den Wert von COMMAND nicht sondern fuegt in
lediglich ein. Danach wird das Ergebnis der Parameter-Expansion in Worte
zerlegt und schliesslich ausgefuehrt.

show()
{
printf "'%s'" "$1"
}

cmd="show \"a b c\""
$cmd

Die Ausgabe davon ist

"a

Falls der Kommanostring intepretiert werden soll, kann man eval
benutzen:

show()
{
printf "'%s'" "$1"
}

cmd="show \"a b c\""
eval $cmd

Ähnliche fragen