2016-04-21 3 views
1

Hallo ist, was ichWie man variablen Abstand im FTP-Befehl in BASH erhält? hier

string='quote site LRECL=4096 - quote site RECFM=VB' 
echo $string | sed s/-/\\n/g 

Ausgang zu tun versuche, ist:

quote site LRECL=4096 
quote site RECFM=VB 

Aber wenn ich FTP versuchen zu tun wie:

ftp_f=`ftp -vni $ADDRESS <<EOF > log_fil 
user $USER $PASS 
$string | sed s/-/\\n/g 
bye 
EOF` 

Es ist nicht Newline hier schaffen nicht so es führt nur einen quote site Befehl aus, wenn ich so viele von ihnen ausführen muss, wie es in der String-Variablen gibt. Ich habe versucht, echo $string | sed s/-/\\n/g in einer neuen Variablen zu speichern, um es mit Anführungszeichen wie "$string2" innerhalb von FTP zu nennen, aber FTP erkennt es nicht. Bitte sagen Sie mir, was zu tun ist?

+0

Stimmt 'string = $ 'Site LRECL = 4096 \ nquote Site RECFM = VB'' und dann nur mit '$ String' in der Heredoc Arbeit? –

+0

F: Ist das Ziel ** ** sed ** auf einem entfernten ** ftp ** -Server auszuführen oder ** sed ** lokal in ** bash ** ausgeführt zu werden? – agc

+0

@agc Ich möchte es auf einem remote ftp.because ausführen, wenn ich es lokal ausführen und ich weiß nicht, wie oft es diesen Site-Befehl so deklariert, dass viele Variable nicht möglich wäre. – msj003

Antwort

1

1) Das Problem kann nicht brauchen sed, zuerst versuchen, diese:

string="user $USER $PASS 
quote site LRECL=4096 
quote site RECFM=VB 
bye 
" 

ftp_f=`echo "$string" | ftp -vni $ADDRESS > log_fil` 

Aber wenn sed benötigt wird, lesen Sie weiter ...

2) a Zum Speichern mehrzeiliger Befehl in einer Zeichenfolge, die in eine Pipe ausgegeben werden kann, versuchen Sie Folgendes:

foo="{ echo hi ; echo ho ; }" 
eval "$foo" | sed s/h/H/ 

... die Ausgänge:

Hi 
Ho 

Vorsicht mit eval, da es etwas laufen kann (d schreckliche Dinge wie rm -f *). Wenn eine Benutzereingabe in einer Zeichenfolge verwendet werden soll, die auf eval geht, analysieren und prüfen Sie sie zuerst.

Vermeiden Sie Variablennamen, die auch Befehlsnamen sind. Es gibt bereits einen String Befehl.

+0

using eval arbeitete für mich. Vielen Dank :) – msj003