BASH Shell 将输出和错误重定向到 /dev/null
您可以使用命令 >/dev/null语法 将输出发送到 /dev/null 。但是,当命令使用标准错误 (FD # 2) 时,此方法不起作用。因此,您需要按如下方式修改 >/dev/null,以将输出和错误都重定向到 /dev/null。
教程详细信息 | |
---|---|
难度等级 | 简单的 |
Root 权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
预计阅读时间 | 5 分钟 |
了解与每个进程相关的 Bash 文件名
每个 Linux 或 Unix 进程都使用以下文件。以下是使用 ls 命令查看它们的方法:
$ ls -l /dev/{stdout,stdin,stderr}
输出:
lrwxrwxrwx 1 root root 15 Jun 10 17:56 /dev/stderr -> /proc/self/fd/2 lrwxrwxrwx 1 root root 15 Jun 10 17:56 /dev/stdin -> /proc/self/fd/0 lrwxrwxrwx 1 root root 15 Jun 10 17:56 /dev/stdout -> /proc/self/fd/1
在哪里,
- /dev / stdin ( 0) –标准输入(通常是键盘或文件)。当命令打开 /dev/stdin时,它可以读取用户的输入。
- /dev/stdout ( 1) –标准输出(通常为屏幕)。当命令写入/dev/stdout 时,其输出将显示在屏幕上。
- /dev/stderr ( 2) –标准错误或(通常为屏幕)。当程序或命令写入 /dev/stderr 时,其错误消息将显示在屏幕上。
这些特殊文件可用于重定向程序、脚本和命令的输入和输出。例如:
# Redirect the standard input of the command1 from the file to /dev/stdin: command1 filename </dev/stdin # Redirect the standard output of the command2 to the file /tmp/output.txt # command2 >/tmp/output.txt # Redirect both the standard output (stdout) and standard error (stderr) of the command3 to the file /tmp/mylog.txt: command3 2>&1 >/tmp/mylog.txt
Linux 和 Unix 中的 /dev/null 文件是什么?
如果您使用的是 Linux 或 Unix 操作系统,则可以使用名为 /dev/null 的特殊文件来丢弃您写入的任何数据。此文件主要用于隐藏程序的输出或错误。例如,您可以使用此命令隐藏“ pwd ”或“ date ”的输出:
$ pwd
$ date
## NOW HIDE IT ##
$ pwd >/dev/null
$ date >/dev/null
它是如何工作的?
>操作符将“pwd”或“date”命令的标准输出重定向到名为 /dev/null 的文件。换句话说,“pwd”或“date”的输出将被丢弃,不会显示在屏幕上 (stdout)。请注意,/dev/null 还可用于从程序读取输入。例如,以下命令将读取用户的输入,然后将其丢弃:<
$ command1 </dev/null
操作符将 command1 的标准输入 (stdin) 重定向到文件 /dev/null。这意味着用户的输入将被丢弃,不会存储在变量中。 </dev/null 为脚本或命令提供空输入。例如,在此示例中,我使用 echo 命令创建电子邮件的文本正文,将其通过管道传输到 mail 命令,并将其发送到名为 vivek@example.com 的指定电子邮件地址。 </dev/null 确保“mail”命令不会等待进一步的输入:
$ echo 'Test mail body' | mail -s 'Test subject' -r webmaster@example.com vivek@example.com </dev/null
将错误和输出消息重定向到 /dev/null 的语法
下面讨论的语法适用于类似 Bourne 的 shell,例如 sh、ksh 和 bash:
command >/dev/null 2>&1 ./script.sh >/dev/null 2>&1 ./example.pl >/dev/null 2>&1
或者
command &>/dev/null job arg1 arg2 &>/dev/null /path/to/script arg1 &>/dev/null
您还可以对所有cronjobs使用相同的语法,以避免电子邮件和输出/错误消息:
@hourly /scripts/backup/nas.backup >/dev/null 2>&1
或
@hourly /scripts/backup/nas.backup &>/dev/null
将标准错误和标准输出消息重定向到日志文件
您始终可以通过键入以下命令将标准错误 (stdin) 和标准输出 (stdout) 文本重定向到输出文件或日志文件:
command >file 2>&1 /path/to/my/cool/appname >myapp.log 2>&1
想要关闭在 Linux/Unix/BSD/macOS (OSX) bash shell 上执行的命令的 stdout 和 stderr 吗?
尝试以下语法:
## Close stdout and stderr for the command being executed ## ## Thanks http://www.example.com/faq/how-to-redirect-output-and-errors-to-devnull/#comment-40252 ## /path/to/command 1>&- 2>&- ## Note: additional '&' at the end of job to put it in backgrounds ## job1 1>&- 2>&- & /path/to/command 1>&- 2>&- &
总结
/dev/null 是一个有用的工具,可以帮助您管理 Linux、macOS、BSD 和类 Unix 系统下的脚本和命令的输入和输出。通过了解它的工作原理,您可以编写更有效的 shell 脚本和命令。以下是您可以使用 /dev/null 的一些其他方法:
- 阻止程序在屏幕上产生错误消息。
- 隐藏任何命令或脚本发送到屏幕的过多错误或输出消息。
- 测试脚本的输出但不显示它。
- 创建一个“黑洞”来丢弃您不需要的数据。
本页介绍了 BASH、KSH 和其他将输出重定向到 /dev/null 的 shell。有关更多信息,请使用 help 命令、man 命令或 info 命令查看以下手册页:
$ man bash
$ info bash
$ man ksh