如何“静音” ls命令?

蓝代码

假设我做一个递归 ls

$ ls -R 

在根目录上。

我收到很多这样的消息-

ls: cannot open directory ./var/lib/sendmail: Permission denied
ls: cannot open directory ./var/lib/sudo: Permission denied
...

有没有办法避免显示上述“ cannot open directory”消息?

约瑟夫·R。

由于这些是错误消息,因此它们被发送到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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章