|
|
shell脚本中 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别
8 q0 @' H& o# G! Y; r
$ i% ]4 m9 a) I+ _% ~
. y4 ?0 V- h9 M* `* N1 H) j4 V8 K- D3 s5 h& [0 X+ s
一、区别:
' S5 x3 K* D3 `0 D/ D Z, q. x2>/dev/null
* G/ `) P6 |/ R0 K意思就是把错误输出到“黑洞”
, ^( N, `) Z$ {3 C# D7 y# c
6 K4 m. ^* X6 P& k( N9 y>/dev/null 2>&1$ E) ~. B1 `. Q& T
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” b. y& w# ~+ H c, g O
7 l, k# y: j. u1 |; w+ u: m, ^! ^2>&1 >/dev/null# S' A: l( U, a( y5 @8 y. b
意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕
( e3 ~, H o; Y2 O3 t9 W- u' V
! C: W2 N4 L0 \8 F% d. M. y二、解释:
# v% `0 X5 y( ^1 C6 ~1、文件描述符
; Y; f# t% T0 D9 ]& e; cLinux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
/ |% f! d2 g8 U) q+ P0——标准输入(stdin): K: _! d9 V1 ], ^
1——标准输出(stdout); m/ }( a1 q$ q$ S, h6 s
2——标准错误(stderr)
( m9 q. }* i2 Q5 w
" Y7 J' K& \' o& e A标准输出——stdout1 e. Z# S. v! _( Y' f
假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt& r! p+ K5 D8 d9 E
在这里插入图片描述3 H/ U- U5 j x) a. ^2 {
错误输出——stderr( O* X$ p9 ]: `( f. @
按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。) B# X: `* Y. _
在这里插入图片描述
( \& P) k; n2 h. ^7 Z+ G2、重定向( Q3 z t5 F% {' |
重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:
( f4 v0 U3 j! q4 F2 i(1)、重定向标准输出stdout% J8 f/ G: S6 |+ `2 ?8 R+ c
在这里插入图片描述9 Z# b# v2 l2 g
如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。7 s8 b1 Y/ w: C" s! H- Q3 E
. B& y1 I0 J$ r. P& `& P(2)、重定向标准错误stderr4 G6 d- A2 j; e" L6 u9 M, h* H# v) |
在这里插入图片描述, C& k; M' a7 U b- Q
如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。
' i) \# J3 O/ B7 F" U& F& G) F5 C. X$ y$ u
(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件* q% ^" ~ [7 \* o6 X* I# i
cmd 2> stderr.txt 1>stdout.txt9 P- R, J: w- C8 e# i" j& n
- [3 i f! R+ U+ e/ d
(4)、也可以将stderr和stdout重定向到同一个文件
1 U N9 v T+ V' D F/ lcmd > output.txt 2>&1& b9 {) q: S: q7 K1 m
2 V' |8 z: q% \; t* l' ^或采用下面的方法,可以少写几个字,能达到同样的效果4 j% h: I6 ]5 F" M! n5 e
6 T. ]8 R* @: A* v
cmd &> output.txt) r4 Q& i9 g! G; z% K6 g7 ~: w
& F7 x( p: Z7 T5 O* Y2 X! p5 {$ R0 s
cmd >& output.txt #两个表达式效果一样的
. Z' q& d, a& N
" b. F1 z. I4 ]. | |
|