2016-04-21 68 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