将带有stderr重定向的管道命令的输出分配给脚本中的变量时,csh(tcsh)输出重定向不明确



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

命令是:

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

然而,这并不奏效。我得到一个模糊的"模糊输出重定向"

我迷路了,因为当我在终端中键入命令时,它本身就可以工作,并且我可以看到文本unknown

2>&1不是有效的csh语法。这只适用于Bourne shell。

要同时通过管道传输stdout和stderr,可以使用|&运算符。

还要注意,默认情况下ping将永远运行,您可能需要添加一个-c选项来限制它的运行次数。

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

如果它以交互方式工作,则交互式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`

最新更新