gpt4 book ai didi

linux - 在 tcsh 中隐藏 stderr 和管道 stdout

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:57 26 4
gpt4 key购买 nike

如何隐藏 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 和管道 stdout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38218983/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com