易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 3|回复: 0
收起左侧

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

[复制链接]
发表于 2024-11-16 22:26:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
shell脚本中 2>/dev/null和>/dev/null 2>&1和2>&1>/dev/null的区别
/ ~/ Y; b1 E# C5 O* H& G/ M8 Z8 V, D7 t. ]9 X6 p* Q. l) f. t
+ z+ P  z) {, Z/ j/ v* M9 f

0 v$ }: O1 p9 Z% {6 n一、区别:
8 t  n2 i6 c! t2>/dev/null
- J) W/ x! i" \意思就是把错误输出到“黑洞”
8 k$ P8 W# D# C) G  i% i3 j' `  A  t
>/dev/null 2>&1$ o2 X: Y$ V6 z& Z/ [  ?
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
* q, F) ^4 ^* Y$ H% S9 d& S3 z$ L7 V1 J( z
2>&1 >/dev/null
. R% c& a% N" m: j' J意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕- X, q' s- A6 Y: n( U# A

6 S& d' o. `; V% j! F) f& Y% C二、解释:9 {/ T! F: Q$ O9 d
1、文件描述符
1 g9 p6 E# V/ ]* YLinux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:4 X5 x# r% d% ^, _! L2 p- E% j, \
0——标准输入(stdin)9 w% |" B% ^! z: I" J
1——标准输出(stdout)" m  j8 {3 R4 d. X6 [! H
2——标准错误(stderr)
2 `6 b7 I& a4 O' X
1 F! M7 d' n/ I5 N1 u& F) n4 f5 l标准输出——stdout( y5 R8 w  F# w8 Z5 n
假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt: [6 O- V$ U- y  C6 m  @: o
在这里插入图片描述
/ N8 f" u5 S1 V) x3 n& I  r# m8 Y4 E9 L错误输出——stderr$ H9 r& x6 v! U7 E+ q! z8 |. _
按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。* l& @( Q: d2 Y7 o$ T
在这里插入图片描述
, b, {4 e4 D* l1 {  F; j% Q0 o0 \2、重定向
3 ?. E+ x7 l3 q, V: P! I重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:; t  ]6 K3 ~" A" V8 s  g* w, }4 P
(1)、重定向标准输出stdout$ J7 e: }% {. X1 T: c6 G
在这里插入图片描述8 J* r0 v7 Q( r3 J
如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。7 }. c) @$ P) U: N8 b

# A; d0 F9 d  d" D* @(2)、重定向标准错误stderr8 d$ A: w) e3 x4 K" }$ p" X
在这里插入图片描述5 Q5 x2 T5 N8 H* \3 [: M& W% |
如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。: k1 o' f6 M+ v' U3 G

: [5 l, X/ w9 p' D3 v0 i3 w(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件
5 I* F1 j& v( N; l# ~cmd 2> stderr.txt 1>stdout.txt
9 l% v" Q( Q( r5 ~2 q& M
7 {% }# c6 r, t7 h1 P7 e' o(4)、也可以将stderr和stdout重定向到同一个文件
, t" B7 b: F; q: Ucmd > output.txt 2>&13 W4 N( O6 w6 T- a& M: i
, f4 V; u- d4 ]6 z0 L. ]( d# g; H' F
或采用下面的方法,可以少写几个字,能达到同样的效果1 B0 h" @, @4 ~8 `
; x3 p# b1 P& h! z( S  a  }
cmd &> output.txt
! |+ q% J* q6 ~; V7 ]0 I* Q8 X; r. m! t" u0 }' d
cmd >& output.txt #两个表达式效果一样的
$ P) p" |& z$ ~! h4 L" o. a/ H' s
0 \- t" O' T# N0 N) S' a+ r1 d
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-9 00:05 , Processed in 0.049403 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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