2017-03-06 3 views
1

Dieses Beispiel auf swaks basiert, aber es ist nicht das einzige Programm, das ich verwende, in denen dieses Problem in :) meinen Kopf tutShell einbetten Variable mit Leerzeichen innerhalb der Kette von Befehlen

Ich habe eine Variable SUBJECT="test subject"

und dann anhängen ich Befehle in einen String:

SWAKS=" 
    -t $TO 
    -h-From $FROM 
    --header Subject:$SUBJECT 
    --body $BODY 
    --auth 
    [email protected] 
    --auth-password=d83kflb827Ms7d" 

dann Ausführung ich es als ./swaks $SWAKS

aber die Unter Nachricht der Nachricht kommt als test als alles nach dem Leerzeichen ignoriert wird.

Ich habe versucht, die Zitate in einzelne zu ändern, Hinzufügen von Bashas und nichts funktioniert. Was mache ich falsch?

Mein letzter Versuch sah aus wie diese (Ausgabe von stderr):

./swaks -t '$TO' '\' -h-From '"test' subject"'

war um jede Variable einzelnes qoutes am Anfang und Ende und doppelten Anführungszeichen.

+0

haben Sie versucht: SUBJECT = "'test subject'" einzelnes Zitat in den Anführungszeichen? –

+3

Wie häufig in diesem Fall zitiert wird: http://mywiki.wooledge.org/BashFAQ/050 –

+0

Genauer gesagt, [Abschnitt 1.5 von Bash FAQ 50] (http://mywiki.wooledge.org/BashFAQ/050#I .27m_constructing_a_command_based_on_information_that_is_only_known_at_run_time). – chepner

Antwort

1

Aus diesem Grunde bash Arrays zur Verfügung stellt.

SWAKS=(
    -t "$TO" 
    -h-From "$FROM" 
    --header "Subject:$SUBJECT" 
    --body "$BODY" 
    --auth 
    [email protected] 
    --auth-password=d83kflb827Ms7d 
) 

# Appending additional arguments to the array in a loop 
for f in attachments/*; do 
    # Same as SWAKS=("${SWAKS[@]}" --attach "$f") 
    SWAKS+=(--attach "$f") 
done 

./swaks "${SWAKS[@]}" 
+0

Kann ich Argumente an das Array mit "for" -Schleife anhängen? – Moseleyi

+0

In der Tat; Sie können mit dem Operator '+ =' an ein Array anhängen: 'SWAKS + = (--another-option" und sein Argument ")'. – chepner

+0

Ich habe es mit der for-Schleife verwendet und es funktioniert wie ein Zauber, Zeit, um mehr über diese Arrays zu lesen – Moseleyi

1

IMHO, alle Kommandozeilenargumente in einer einzigen Variable zu halten ist keine gute Idee. Ich würde eher es so machen:

./swaks       \ 
    -t "$TO"      \ 
    -h-From "$FROM"    \ 
    --header Subject:"$SUBJECT" \ 
    --body "$BODY"     \ 
    --auth       \ 
    [email protected] \ 
    --auth-password=d83kflb827Ms7d 
+0

Der Grund, warum ich es mit einer Variablen gemacht habe, ist, weil hinter diesem Teil der Befehlszeichenfolge eine Schleife ist, die Anhänge einzeln hinzufügt. Ich konnte keinen anderen Weg finden, um beide zu erreichen – Moseleyi

Verwandte Themen