在shell脚本中,默认状况下,总是有三个文件处于关上状态,规范输出(键盘输入)、规范输入(输入到屏幕)、规范谬误(也是输入到屏幕),它们别离对应的文件描述符是 0,1,2 。
  • & 是一个描述符,如果1或2前不加&,会被当成一个一般文件。
  • > 默认为规范输入重定向,与 1> 雷同
  • 1>&2 意思是把规范输入重定向到规范谬误.
  • 2>&1 意思是把规范谬误输入重定向到规范输入。
  • &>filename 意思是把规范输入和规范谬误输入都重定向到文件filename中.
  • >&21>&2也就是把后果输入到和规范谬误一样
/dev/null是一个文件,这个文件比拟非凡,所有传给它的货色它都抛弃掉

规范输入和谬误输入

> lsrumenz.txt> ls rumenz.txt 1.txtls: 1.txt: No such file or directoryrumenz.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.logrumenz.txt> rumenz cat err.logls: 1.txt: No such file or directory
  • out.log存的是规范输入
  • err.log存的是谬误输入

案例剖析

> ls rumenz.txt 1.txt > out.txtls: 1.txt: No such file or directory> cat out.txtrumenz.txt
因为只重定向了规范输入,所以out.txt文件只有规范输入
> ls rumenz.txt 1.txt > out.log 1>&2ls: cannot access 1.txt: No such file or directoryrumenz.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 directoryrumenz.txt
> out.log将规范输入重定向到文件,然而2>&1将谬误输入重定向到规范输入,所以out.log外面既有失常的输入也有谬误的输入.

/dev/null

/dev/null:示意 的是一个黑洞,通常用于抛弃不须要的数据输入, 或者用于输出流的空文件
> rm -f $(find / -name rumenz) &> /dev/null

原文链接:https://rumenz.com/rumenbiji/...
微信公众号:入门小站