为什么这个 bash 命令没有回显到变量中,我该怎么做才能改进?

为什么这个 bash 命令没有回显到变量中,我该怎么做才能改进?

我有一个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;) );

相关内容