如何“静音”ls 命令?

如何“静音”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”消息?

答案1

由于这些是错误消息,因此它们被发送到 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 可以通过or >...or重定向>>...(附加到现有文件而不是截断它)

标准错误重定向要求您显式指定文件描述符,如下所示:2>...,因此上面的作用是将所有错误定向到特殊文件,/dev/null该文件有点像位黑洞。

相关阅读关于 MattDMo 在下面的评论中提供的重定向。

相关内容