重定向操作
重定向操作
简介
在 Unix/Linux 系统里,每个进程默认会打开三个标准数据流:
- 标准输入(stdin):文件描述符为 0,用于接收用户输入。
- 标准输出(stdout):文件描述符为 1,用于输出命令的正常执行结果。
- 标准错误(stderr):文件描述符为 2,用于输出命令执行过程中产生的错误信息。
示例
2>/dev/null
2
代表标准错误(stderr)。>
是重定向符号,用于将输出导向其他地方。/dev/null
是一个特殊的设备文件,被称为 “黑洞”,所有写入它的数据都会被丢弃。
所以,2>/dev/null
的作用是将命令执行过程中产生的错误信息重定向到 /dev/null,也就是将错误信息丢弃,不在终端显示。
ls non_existent_file 2>/dev/null
上述命令尝试列出一个不存在的文件,正常情况下会输出错误信息,但由于使用了 2>/dev/null
,错误信息会被丢弃,终端不会有任何输出。
2>&1
上述命令将标准错误(stderr)重定向到和标准输出(stdout)相同的位置
1>/dev/null 或 >/dev/null
1
代表标准输出(stdout),1>/dev/null
用于将命令的正常执行结果重定向到 /dev/null
,即丢弃正常输出。由于标准输出是默认的输出流,所以 >/dev/null
等同于 1>/dev/null
。
ls /tmp 1>/dev/null
上述命令会将 ls /tmp
的正常输出结果丢弃,终端不会显示 /tmp
目录下的文件列表。
&>/dev/null
&
是一个特殊符号,用于表示将标准输出(stdout)和标准错误(stderr)都重定向到指定的位置。&>/dev/null
表示将命令的正常输出和错误信息都丢弃。
ls non_existent_file &>/dev/null
上述命令会同时丢弃 ls non_existent_file
的正常输出和错误信息,终端不会有任何输出。
>/dev/null 2>&1
这种写法先将标准输出(stdout)重定向到 /dev/null
,然后 2>&1
表示将标准错误(stderr)重定向到和标准输出相同的位置,也就是 /dev/null
,同样实现了将正常输出和错误信息都丢弃的效果。
ls non_existent_file >/dev/null 2>&1