如何隐藏stderr但在csh脚本中使用stdout?
我试图在某个文件中找到可能存在或不存在的事件,并根据结果采取行动:
if (`grep phrase file | wc -l` > 0) then
echo 'Match!'
endif
问题是如果文件不存在,控制台上会显示错误。
我找到了如何删除stderr并将stdout重定向到控制台(根据https://unix.stackexchange.com/questions/35715/stderr-redirection-not-working-in-csh):
`(grep phrase file | wc -l > /dev/tty) >& /dev/null
但它在我的情况下不起作用,因为我想在脚本中使用结果。
我考虑过替换临时文件中的/dev/tty
并使用其内容,但我想知道是否存在没有临时文件的解决方案。
另一种方法是使用我的csh脚本中的bash:
if (`echo 'grep phrase file 2> /dev/null' | sh | wc -l`) then
echo 'Match!'
endif
但是如果grep命令更复杂,这可能会使脚本复杂化,例如当使用变量时,下面的命令不会按原样运行:
if (`echo 'grep $phrase file 2> /dev/null' | sh | wc -l`) then
echo 'Match!'
endif
因此我更喜欢csh pure solution。
我怎样才能在纯csh中做到这一点?
答案 0 :(得分:1)
您只需将 2>& - 添加到命令后即可关闭标准错误。
如果C shell(特别是)抱怨这种语法(我不记得,我不会在令人惊讶的不完整的#34;参考手册"中看到它),那么它采用旧的瑞士军刀技术,即 2> / dev / null 。这就是/ dev / null的用途:它是内存设备驱动程序的一个入口点,只是丢弃写入它的数据。