重定向符

 2014-04-16    曼谷 /linux/2014/04/16/redirection.html linux shell

本文最近更新于 2019 年 09 月 11 日

Linux 可谓是一款不同凡响的操作系统,它拥有一个稳定、可靠且极其强大的完备的开发环境。作为与操作系统进行沟通的原生界面,Shell 能够控制整个操作系统的运作,使得用户能与操作系统的内核直接进行交互操作。
Linux Shell 脚本简明教程 https://jsntn.com/linux/shell.html

当我们知道了 0 1 2 这些描述符之后,接下来就可以使用重定向符来将过滤的内容保存到一个文件中了。

两个重定向符:

区别在哪里?我们依次执行下面的每行代码:

echo 'text 1' > temp.txt
cat temp.txt
echo 'text 2' >> temp.txt
cat temp.txt
echo 'text 3' > temp.txt
cat temp.txt

执行结果是这样,当我们第一次执行 cat temp.txt 时得到的显示是:

text 1

第二次执行 cat temp.txt 时得到的显示是:

text 1
text 2

第三次执行 cat temp.txt 时得到的显示是:

text 3

由此我们可以知道 >>> 并不相同,两者都可以重定向到文件,前者是先清空再写入,后者是追加(append)到现有文件中。

当我们使用了重定向符时,重定向的内容不会出现在终端,而是直接被写入文件中。

测试一下:

.

.

.

.

.

>/dev/null 2>&1 指将程序输出重定向到 /dev/null,包括标准输出和标准错误。

.

.

.

.

.

.

同上,>/dev/null 2>&1 指标准输出重定向到 /dev/null,然后标准错误重定向至标准输出的位置(then STDERR redirects to THE ADDRESS of STDOUT),即重定向至 /dev/null。

2>&1 >/dev/null 将标准错误重定向至标准输出的位置(STDERR redirects to THE ADDRESS of STDOUT(File descriptor 1 in that moment, or /proc/self/fd/1)),然后标准输出重定向至 /dev/null,注意:但是标准错误仍然被重定向至标准输出的位置!

因此,标准输出的结果会被丢弃,但是标准错误输出会写入 console。

$ cat test
echo stdout
echo stderr >&2

$ ./test > /dev/null 2>&1
$

$ ./test 2>&1 > /dev/null
stderr

扩展阅读:

关于作者
Jason,80 后,现从事通信行业。安卓玩家一个人的书房朗读者麦子
 英语入门到放弃
 jsntn
 jasonwtien
 jasonwtien
更多…… /about.html

最近更新: