2013-07-12 93 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 ...)'。 –

相關問題