csh(tcsh)指定管道命令输出时的模糊输出重定向w / stderr重定向到脚本中的变量

时间:2015-03-03 15:28:47

标签: linux shell ping csh

我正在尝试将我的管道命令的输出分配给csh脚本中的变量。

命令是:

set VAR="`ping $1 2>&1 | grep 'unknown' | cut -b 7-13`"

然而,这不想工作。 我得到一个模糊的“不明确的输出重定向。”

我输了,因为当我在终端输入命令时命令本身有效,我可以看到文字unknown

2 个答案:

答案 0 :(得分:6)

2>&1无效csh语法。这仅适用于Bourne shell。

要管道stdout和stderr,您可以使用|&运算符。

另请注意,默认情况下ping将永久运行,您可能需要添加-c选项以限制其运行次数。

set VAR="`ping localhost -c 5 |& grep 'unknown' | cut -b 7-13`"

答案 1 :(得分:2)

如果它以交互方式工作,那么你的交互式shell不是csh ......这可能是一件好事。 csh中的Stderr重定向仅使用>&,但只将stderr和stdout重定向到一个文件中。

另见http://www.faqs.org/faqs/unix-faq/faq/part2/section-9.html

如果目的是弄清$1是否解析,ping无论如何都是错误的工具。尝试

set VAR=`dig +short "$1" || echo unknown`