我有一个bash 脚本我正在努力改进,并且已经取得了很大的进步,这要归功于丹尼斯·威廉森。不幸的是,其中一行不再回显到我可以操作的变量中,而是直接转储输出。如果我修复了这个问题,我就可以开始了。
为什么这个 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,
我期望看到如下内容:
2011 年 2 月 15 日星期二 08:39:53 PST,192.168.0.2,3.887
2011 年 2 月 15 日星期二 08:39:57 PST,192.168.0.3,3.910
答案1
您需要在命令替换内部但在重定向之前用花括号括住整个命令:
result=$( { time wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com; } 2>&1; );
这将捕获 的输出time
。如果您想要捕获 的错误输出wget
(您已经将其常规输出保存到文件中),则需要做一些不同的事情,这取决于您到底想做什么。它可能涉及额外的文件描述符,或者只是使用我在回答您的另一个问题时展示的重定向(而不是使用--output-document
)。
答案2
我认为这应该转到堆栈溢出但你尝试过吗?
result=$( time (wget -q --output-document=/tmp/wget.$$.html http://domain.tomonitor.com 2>&1;) );