如何隐藏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纯溶液。
在纯csh里我怎么能做到?
最佳答案
只需加上2>命令,就可以关闭标准错误。
如果C shell(特别是)抱怨这种语法(我真的不记得了,而且我在令人惊讶的不完整的“参考手册”中看不到),那么就用旧的瑞士军刀技术,即2>/dev/null来做。这就是/dev/null的作用:它是内存设备驱动程序的一个入口点,只会丢弃写入它的数据。
关于linux - 在tcsh中隐藏stderr和pipe stdout,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38218983/