找回密码
 注册
查看: 9|回复: 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的区别
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 ]. |
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 00:46 , Processed in 0.016448 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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