找回密码
 注册
查看: 8|回复: 0

shell脚本中 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2024-11-16 22:26:03 | 显示全部楼层 |阅读模式
shell脚本中 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别! B7 O: y- [; C0 k/ u' W
7 h' R( ?$ _' r" q$ ~, T
& Z2 B- W2 U7 H6 v. \& C
1 g) E5 E% w% t9 n& {" T" w
一、区别:2 J" M& }. x1 S
2>/dev/null
" _2 }% c. G8 D) l+ m4 l意思就是把错误输出到“黑洞”2 a) w& H. J6 N, a" q+ V
) [1 N. K) W( c% e" A
>/dev/null 2>&1, ]5 E! ?" Y- _0 j* R, |$ c$ t
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
7 K; s& m3 H* F0 @2 V5 m* K; O! W4 s- i% \' [. x$ n0 k
2>&1 >/dev/null
1 _7 P$ ?9 g$ G7 l7 Q意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕
$ u1 C' @6 r# w, u) d; Q7 u5 _; z$ E8 r+ H7 L0 y
二、解释:: i- v4 C" |1 l% x- v
1、文件描述符) h! ~# ?  r+ [  \# {! M
Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
& r' u, m9 A1 W4 w: H! z( p0——标准输入(stdin)* F/ B, A* l2 _: j9 s1 K+ b
1——标准输出(stdout)9 t8 {% h8 p* A2 P9 [1 N. w/ ~
2——标准错误(stderr)
9 e6 O  q" K0 l: K
/ @3 M6 q4 M5 `标准输出——stdout
- e7 t3 _& z* O; B5 n! ?& }假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt  P$ G# `/ R2 |
在这里插入图片描述
3 U' {5 i5 O- @& z! x( A错误输出——stderr+ o) ~. p* H' l  E( z* v7 S+ w
按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。% b  e' k7 C; D( ?
在这里插入图片描述% }% w1 j3 ]: U, D
2、重定向" E8 Q  ~. M( B  c) e% i
重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:
5 k8 V4 ?# b0 x(1)、重定向标准输出stdout  j$ |: ~5 d# ]9 H* D
在这里插入图片描述; R: T' |3 G; U( H- I5 Y
如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。
/ {" J8 O! c8 r. Z* {2 V% o+ V
- F9 Z8 I( [" @7 ?9 B(2)、重定向标准错误stderr
$ K7 }3 K% y6 w在这里插入图片描述7 y. V2 _+ X/ m
如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。
! U9 w  C) C, b" p" a0 D/ O9 N) o0 V5 l4 V) t
(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件% }7 h* ?  w  u- ?; |
cmd 2> stderr.txt 1>stdout.txt  l' G3 s+ U2 a' K+ v

3 N2 l4 P+ }+ e  l(4)、也可以将stderr和stdout重定向到同一个文件, [1 L! L( G: Z+ g; ^9 g/ l1 E
cmd > output.txt 2>&1$ B$ g* C6 a5 d% J' r
' b2 d: M% b2 u7 y1 m7 \! s: o
或采用下面的方法,可以少写几个字,能达到同样的效果" U: E& u$ i- N2 p# w

/ P7 C4 s1 G  w0 d) Z9 R/ L; U* }, Scmd &> output.txt. c8 E( l5 ]+ g' _; L
6 F) S7 F* h! M
cmd >& output.txt #两个表达式效果一样的
1 W; x/ G0 H. V& d8 J" L' Z8 _$ W6 P( ]) z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 00:40 , Processed in 0.015849 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表