Unix

為什麼這個 bash 命令沒有回顯到變數中,我可以做些什麼來改進?

  • February 15, 2011

我有一個我正在努力改進的bash 腳本,並且感謝Dennis Williamson進行了很好的修復。不幸的是,其中一行不再回顯到我可以操作的變數中,而是直接轉儲輸出。如果我能解決這個問題,我會很高興的。

為什麼這個 bash 命令沒有回顯到 $result 變數中,我可以做些什麼來改進?

  result=$( time wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com 2>&1; );

編輯:我嘗試過的各種解決方案

 result=$( { time (/usr/local/bin/wget -q --output-document=/tmp/wget.$$.html --header="Host: blogs.forbes.com" http://$host) } &2>1 );

 result=$( { time (/usr/local/bin/wget -q --output-document=/tmp/wget.$$.html --header="Host: blogs.forbes.com" http://$host) } );

 result=$( ( time (/usr/local/bin/wget -q --output-document=/tmp/wget.$$.html --header="Host: blogs.forbes.com" http://$host) ) );

編輯2:

我正在呼應這樣的一行:

 echo "$date, $host, $result"

日期和主機目前很好。$result 不是。

我得到這樣的行:

3.887

2011 年 2 月 15 日星期二 08:39:53 PST,192.168.0.2,

3.910

2011 年 2 月 15 日星期二 08:39:57 PST,192.168.0.3,

我期待這樣的行:

2 月 15 日星期二 08:39:53 PST 2011, 192.168.0.2, 3.887

2 月 15 日星期二 08:39:57 PST 2011, 192.168.0.3, 3.910

在命令替換中但在重定向之前,您需要在整個命令周圍加上花括號:

result=$( { time wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com; } 2>&1; );

擷取的輸出time。如果您想擷取錯誤輸出wget(您已經將其正常輸出保存到文件中),您需要做一些不同的事情,這取決於您到底想要做什麼。它可能涉及額外的文件描述符,或者只是使用我在回答您的其他問題時顯示的重定向(而不是使用--output-document)。

引用自:https://serverfault.com/questions/235767