假设我做一个递归 ls
$ ls -R
在根目录上。
我收到很多这样的消息-
ls: cannot open directory ./var/lib/sendmail: Permission denied
ls: cannot open directory ./var/lib/sudo: Permission denied
...
有没有办法避免显示上述“ cannot open directory
”消息?
由于这些是错误消息,因此它们被发送到stderr而不是stdout。解决方案是您重定向stderr:
ls -R 2>/dev/null
解释:
任何命令都有3个标准文件描述符:标准输入(0)(通常是您在其中键入命令的终端),标准输出(1)(通常是命令在其上输出其输出的终端)标准错误(2)(默认情况下是与标准输出相同)。
大多数(如果不是全部)程序/工具将警告和错误打印到标准错误文件描述符中。现在,如果文件描述符是固定的,将不会有太大用处。这就是shell提供重定向的原因:您可以将任何标准文件描述符重定向到所需的任何文件。
重定向标准输入(从文件而不是从键盘获取输入):
interactive_program 0< file_with_answers
如您所见,这可以通过在标准输入上提供所谓的“答案文件”来帮助您自动化运行很多问题的简单程序。
可以缩短为
interactive_program < file_with_answers
因为<
使重定向清晰可见(从文件到程序)
同样,可以通过1>...
或>...
或>>...
(将其附加到现有文件而不是将其截断)重定向stdout。
标准错误重定向要求您像这样明确地指定文件描述符:2>...
,因此上述操作是将所有错误都定向到特殊文件/dev/null
,这对于位来说是一个黑洞。
MattDMo在以下评论中提供的有关重定向的相关阅读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句