我正试图将管道命令的输出分配给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`