2016-04-21 112 views
1

你好這裏是什麼,我試圖做如何在BASH中保留FTP命令中的變量間距?

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

輸出是:

quote site LRECL=4096 
quote site RECFM=VB 

但是當我嘗試做FTP爲:

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

它不會在這裏創建新行等等它只執行一個quote site命令,當我需要執行與字符串變量中一樣多的命令時。我嘗試將echo $string | sed s/-/\\n/g存儲在一個新的變量中,在FTP中用引號將其稱爲"$string2",但FTP無法識別它。 請告訴我該怎麼辦?

+0

'string = $'引用網站LRECL = 4096 \ n引用網站RECFM = VB',然後在heredoc工作中使用'$ string'? –

+0

問:是在遠程** ftp **服務器上運行** sed **,還是** sed **在** bash **本地運行? – agc

+0

@agc我想在遠程ftp上運行它。因爲如果我在本地運行它,並且我不知道它需要那個站點命令多少次,所以聲明很多變量是不可能的。 – msj003

回答

1

1)這個問題可能不需要sed的,先試試這個:

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

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

如果sed的是必要的,閱讀...

2)要存儲多行命令中可以輸出到管道的字符串,請嘗試如下所示:

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

...它輸出:

Hi 
Ho 

小心EVAL,因爲它可以運行任何東西(即可怕的事情,如rm -f *)。如果任何用戶輸入要用於eval的字符串,請首先解析並檢查它。

避免變量名稱也是命令名稱。已有字符串命令。

+0

使用eval爲我工作。謝謝 :) – msj003