在zsh脚本中仅重定向stderr至/dev/null并将stdout写入文件
zsh中正确的输出重定向写法
你之前的写法cmd -opt val > info.txt > /dev/null无效,是因为zsh里连续对标准输出(stdout,文件描述符1)使用>重定向时,最后一个重定向会覆盖前面的,最终stdout会被指向/dev/null,导致info.txt里没有内容,同时终端也看不到输出,但这不符合你要把stdout写入文件的需求。
正确的写法需要分别指定不同文件描述符的重定向:
标准写法:
cmd -opt val > info.txt 2> /dev/null其中:
> info.txt:将stdout(文件描述符1)写入info.txt2> /dev/null:将stderr(文件描述符2)重定向到/dev/null(丢弃错误输出)
这样终端不会显示任何输出,同时info.txt会保留命令的标准输出内容。
另一种等价写法(关闭stderr):
cmd -opt val > info.txt 2>&-2>&-表示直接关闭stderr,效果和重定向到/dev/null一致,部分场景下效率更高。
内容的提问来源于stack exchange,提问作者murray
相关产品推荐
相关产品推荐

