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

csh (tcsh) ambiguous output redirect when assigning output of piped commands w/stderr redirect to variable in script

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

命令是:

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

但是,这不起作用。 我得到一个模糊的 "Ambiguous output redirect."

我迷路了,因为当我在终端中输入命令时,命令本身起作用了,而且我可以看到文本 unknown

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

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

如果目的是弄清楚 </code> 是否解决,那么 <code>ping 无论如何都是错误的工具。尝试

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

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

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

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

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