![查看所有 Bash/Shell 脚本相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-130.png)
我是 Linux 系统新用户,以下是如何使用 Bash shell 在 Linux 或类 Unix 系统上重定向命令错误输出 /dev/null 文件。
Bash、KSH、SH 等 shell 附带三个文件描述符,如下所示:
- stdin ( 0) –标准输入(通常是键盘或文件)
- stdout ( 1) –标准输出(通常是屏幕)
- stderr ( 2) –标准错误或(通常是屏幕)
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
美东时间。阅读时间 | 3分钟 |
Linux 或类 Unix 系统中的 null (/dev/null) 文件是什么?
“/dev/null”文件是一个独特的文件,它只是删除写入其中的任何数据。它的长度始终为零。为了说明这一点,您可以使用“date”命令作为示例。首先,您可以将“date”命令的输出发送到屏幕,然后将其发送到“/dev/null”以丢弃命令输出或结果。例如:
### 在屏幕上显示日期命令输出 ### 日期 ### 现在,通过发送到 /dev/null### date > / dev / null来丢弃日期命令输出
![Unix 和 Linux:将错误输出重定向到 null 命令](https://www.alaica.com/wp-content/uploads/linux-131.png)
语法:St and ard Err或 (stderr ) 到文件或 /dev/ null2
在 Linux、macOS、FreeBSD 和类 Unix 系统上将 stderr 输出重定向到 /dev/null 文件的语法如下:
# 不要在 '2' 和 '>' 之间添加间隙 # command 2 >/ dev / null / path / to / command arg1 arg2 2 >/ dev / null date bar 2 >/ dev / null ls -foo 2 >/ dev /无效的
在本示例中,将 find 命令的输出发送到 Linux 上的 /dev/null:
$ find /etc -type f -name '*' 2>/dev/null
以下示例将导致程序的 stderr 输出写入到名为errors.txt 的文件中:
$ find /etc/ -type f -name "*" 2> errors.txt
想要查看错误中保存的那些错误。 txt 文件?尝试使用“ cat ”、“ bat ”、“more”或“less”,如下所示:
$ cat errors.txt
Linux可以使用df命令检查磁盘空间,并且我们可以使用以下语法隐藏诸如“权限被拒绝”之类的消息:
$ df -h /backups/users 2>/dev/null
请不要在2和> /dev/null之间留下间隙(空白/空白)。这将导致错误:
$ df -h /backups/users 2 > /dev/null
输出显示错误:
df: /backups/users : 权限被拒绝 df: 2: 没有这样的文件或目录
正确的语法如下所示, 2和> /dev/null之间没有任何空格:
$ df -h /backups/users 2>/dev/null
Linux 和 Unix 将(所有)输出和错误重定向到文件
将 stdout 和 stderr 发送到文件的语法如下。
## 将命令输出发送到output.txt,将错误消息发送到error.txt ## command > output.txt 2 > error.txt command -arg1 -arg2 > output.txt 2 > error.txt
如果您希望 stderr 和 stdout 在同一文件中重定向,请尝试以下语法:
命令 > log.txt 2 >& 1
使用cat 命令在屏幕上显示 log.txt:
$ cat log.txt
加起来
当使用 macOS、*BSD、Linux 或类 Unix 系统时,您可以将 stdout 和 stderr 重定向到 /dev/null 甚至文本文件,如本教程中所述。有关详细信息,请使用 man 命令、help 命令或 info 命令查看手册页。这是一个例子:
$ man bash
$ man ksh
$ info