将标准输出重定向到 tcsh 中的标准错误

Nat*_*ons 4 linux shell tcsh

根据我的理解,以下内容应该test在 tcsh 中的标准错误上发送 ' ':

echo test >&2
Run Code Online (Sandbox Code Playgroud)

但是,它改为将 ' test'写入名为 的文件2,当我查看历史记录时,我发现实际执行的是

echo test > & 2
Run Code Online (Sandbox Code Playgroud)

我不确定哪个图层正在插入这些空格,但我可以以某种方式阻止它吗?如果没有,我想我可以随时使用> /dev/stderr

Dav*_*gac 6

编辑:

我没有看到这是tsch。有关man tsch详细信息,请参阅“输入/输出”部分,包括:

诊断输出可以通过带有标准输出的管道进行定向。只需使用形式|& 而不仅仅是|。

shell 目前无法在不重定向标准输出的情况下重定向诊断输出,但是 (command > output-file) >& error-file 通常是一种可接受的解决方法。输出文件或错误文件可以是 /dev/tty 以将输出发送到终端。

  • 感谢您指出这一点,但我不确定它是否适用。我不想重定向进程的诊断输出(stderr?),而是希望正常输出出现在 stdout 上。 (2认同)

Dan*_*son 5

关于csh,来自http://www.faqs.org/faqs/unix-faq/shell/csh-whynot/

按照同样的思路,您不能将 csh 脚本中的错误消息按照被认为正确的方式从 stderr 导出。在 Bourne shell 中,您可能会说:

echo "$0: cannot find $file" 1>&2
Run Code Online (Sandbox Code Playgroud)

但是在 csh 中,您无法将 stdout 重定向出 stderr,因此您最终会做这样的蠢事:

sh -c 'echo "$0: cannot find $file" 1>&2'
Run Code Online (Sandbox Code Playgroud)

我对 进行了一些快速尝试tcsh,并且怀疑它似乎也是如此(tcsh应该与 完全兼容csh)。


解决您提出的问题:如果tcsh不能“插入空格”也没关系因为无论如何它都不会以预期的方式解释该序列。