如何隐藏标准错误,但在csh脚本使用标准输出?隐藏stderr和标准输出管道tcsh中
我试图找到出现在一些文件,它可以根据结果存在与否,并采取行动:
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
并使用其内容,但我不知道是否有没有临时文件的解决方案。
另一种方法是使用bash从我的CSH脚本:
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?
我不认为你能做到这一点在csh壳,并与管道命令SH您的解决方案是** **究竟发生了什么给我。你可以得到的变量,如果你周围使用grep的双guotes(“),而不是单引号(')来代替。 – MAP
是否使用双引号修复与未扩大变量的问题? – 123
我没有检查它,其实我情况比简单的变量问题,我这里显示要复杂得多。恐怕在这里发布,全案将使得问题和答案太复杂,无法使用。我只是想展现的,为什么我更喜欢使用csh而不是重定向的原则打击。 – MaMazav