2013-07-12 37 views
0

我想将脚本的“运行时间”分配给变量“realtime”。所以,我想如下:如何将流水线结果分配给Bash中的变量

realtime = `{ time (echo "mirror -Rv $LocalPath $LocalPath";echo "quit";)|lftp -u s1238262 FTPS://$RemoteHost ; } 2>&1 |grep "real"| awk '{print $2}'` 
echo $realtime 

但我得到了一个错误:

++ grep real 
++ awk '{print $2}' 
+ realtime = 0m2.403s 
./test.sh: line 6: realtime: command not found 
+ echo 

我试图

realtime = `{ time pwd; } 2>&1 |grep real|awk '{print $2}'` 

它做的工作。但是ftp脚本没有。谁能帮我?

+0

除非在交互式会话中定义了名为'realtime'的函数或别名,否则''realtime = ...'调用不起作用。 'bash'中的变量赋值要求在变量名和'='符号之间,或者在符号之后和值之前没有空格(例如'realtime = something'好,'realtime = something'' ,'realtime = something'和'realtime = something'都不好)。 – twalberg

+0

另外'grep foo | awk'{bar}''通常写得更好'awk'/ foo/{bar}''。 – tripleee

+0

非常感谢!但关于awk的重写,我没有明白。我把它写成''realtime ='{time pwd; } 2>&1 | awk'/ grep“real”/ {print $ 2}''''。但它运行错误: '++ awk'/ grep“real”/ {print $ 2}'' '+ a =' – dmoney

回答

3

bash中的=周围一定不能有空格。

result=`ls` 
+1

[不要分析ls!](http://mywiki.wooledge.org/ParsingLs)。 (对不起,忍不住:-)) – user000001

+0

干杯!我还没有习惯bash的“无空间”规则。 – dmoney

+0

请勿使用反标记;使用'variable = $(command args ...)'。 –

相关问题