在 shell 脚本中,默认状况下,总是有三个文件处于关上状态,规范输出(键盘输入)、规范输入(输入到屏幕)、规范谬误(也是输入到屏幕),它们别离对应的文件描述符是 0,1,2。
&
是一个描述符,如果 1 或 2 前不加 &,会被当成一个一般文件。>
默认为规范输入重定向,与1>
雷同1>&2
意思是把规范输入重定向到规范谬误.2>&1
意思是把规范谬误输入重定向到规范输入。&>filename
意思是把规范输入和规范谬误输入都重定向到文件 filename 中.>&2
即1>&2
也就是把后果输入到和规范谬误一样
/dev/null
是一个文件,这个文件比拟非凡,所有传给它的货色它都抛弃掉
规范输入和谬误输入
> ls
rumenz.txt
> ls rumenz.txt 1.txt
ls: 1.txt: No such file or directory
rumenz.txt
- 因为
1.txt
不存在, 所以ls: 1.txt: No such file or directory
就是谬误输入就是 2。 rumenz.txt
文件是存在的, 所以rumenz.txt
就是规范输入。就是 1。
把上述的规范输入和谬误输入重定向到文件
> ls rumenz.txt 1.txt 1>out.log 2>err.log
> cat out.log
rumenz.txt
> rumenz cat err.log
ls: 1.txt: No such file or directory
out.log
存的是规范输入err.log
存的是谬误输入
案例剖析
> ls rumenz.txt 1.txt > out.txt
ls: 1.txt: No such file or directory
> cat out.txt
rumenz.txt
因为只重定向了规范输入, 所以
out.txt
文件只有规范输入
> ls rumenz.txt 1.txt > out.log 1>&2
ls: cannot access 1.txt: No such file or directory
rumenz.txt
> cat out.log
> out.log
将规范输入重定向到文件, 然而1>&2
将规范输入重定向到了谬误输入, 所以out.log
外面什么也没有.
> ls rumenz.txt 1.txt > out.txt 2>&1
> cat out.txt
ls: cannot access 1.txt: No such file or directory
rumenz.txt
> out.log
将规范输入重定向到文件, 然而2>&1
将谬误输入重定向到规范输入, 所以out.log
外面既有失常的输入也有谬误的输入.
/dev/null
/dev/null
: 示意 的是一个黑洞,通常用于抛弃不须要的数据输入,或者用于输出流的空文件
> rm -f $(find / -name rumenz) &> /dev/null
原文链接:https://rumenz.com/rumenbiji/…
微信公众号: 入门小站