重定向符
本文最近更新于 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 2>&1
指将程序输出重定向到 /dev/null,包括标准输出和标准错误。
.
>/dev/null 2>&1
和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
扩展阅读:
- I/O Redirection
- Difference between “>/dev/null 2>&1” and “2>&1 >/dev/null”
- What does ‘>/dev/null 2>&1’ mean in this article of crontab basics?
- redirecting to /dev/null
最近更新: