易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 2|回复: 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的区别* a/ Z; B# I; R
0 H! Z: Z" y2 v. |
% F: ~9 M( A5 R
  X# s5 {* c+ R* e: O/ ?6 H: t
一、区别:
9 d/ Q0 J  K6 @, T2>/dev/null  p; Z3 e" W+ I" J* A
意思就是把错误输出到“黑洞”
8 o2 o* T; |7 @
$ Z3 h8 }; m7 V7 j' L! \% a>/dev/null 2>&1
# n/ r  u+ M; Z1 y2 W$ ]默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”8 B. N3 o7 Z6 ~6 v7 v  M; [7 C, o5 m

- t# z- p, D8 F; V9 q2>&1 >/dev/null
. ?8 N, ?' z% j2 a3 {意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕( ?4 }! a0 S5 r: F4 P# b6 W
$ e/ ^( W" g4 w6 i
二、解释:# A+ c6 e) J7 J7 x& L
1、文件描述符. ^3 L7 f/ }. z& G7 w
Linux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
! K2 l( [! n# G, j5 o% E/ [0——标准输入(stdin)# `& ?, o* j& N; J0 w( C
1——标准输出(stdout)
4 D6 i; f& f5 \" q) V: i% x& U2——标准错误(stderr)
2 |, J" B$ _* v# x3 S0 D* J
% R4 M& T5 D7 u$ z4 \标准输出——stdout9 E7 b* r2 z- n
假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt
# v$ i( j9 p8 O- g% q2 X在这里插入图片描述
9 j8 m% U5 m, ^+ m0 U错误输出——stderr
& t0 U3 i) ~; s& ^! V) P按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。  V' A  ~8 A3 n& {' C# h& s9 V
在这里插入图片描述
* E+ }2 `* I" @, \2、重定向
! d7 F5 h, }& c( H  ]6 l0 l# w重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:
% z. T3 J/ [/ f. r. v* Q(1)、重定向标准输出stdout, v$ X9 F7 s8 G' r' j, z3 {
在这里插入图片描述
% O. B2 Z2 T+ [# ]! V6 Q' N如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。) O# D* J; n+ l' A9 Y( D' ^
- }# }0 J% H* t- @* X$ b/ Q
(2)、重定向标准错误stderr8 Z7 @( j/ ?  U0 x1 [* V3 N4 ]
在这里插入图片描述9 E0 r+ z+ Y, v% E
如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。
0 L" D6 K$ a9 p" [9 }+ \2 ~5 @$ \* k1 T# }6 P# M
(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件7 y/ y* M, a" F: G
cmd 2> stderr.txt 1>stdout.txt6 j% D. w1 q; }7 t
5 d! R* L- H: C: g* x+ ?
(4)、也可以将stderr和stdout重定向到同一个文件
4 Y% {3 \* c% K  f, E2 dcmd > output.txt 2>&1
1 @+ E) s0 O7 Y" {7 ?( W0 O8 C3 f/ O1 f! A+ n
或采用下面的方法,可以少写几个字,能达到同样的效果
$ e# Q8 r# x- r7 x8 [# f* ?2 |: B- F! C
cmd &> output.txt
% @5 y# n$ u( G9 `1 M$ U5 P
9 @. l9 J' e' G$ z. u, rcmd >& output.txt #两个表达式效果一样的
, r2 x+ n. P4 N9 A: ?; J; V( ?& `; e1 Q2 R1 x5 G
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

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

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

GMT+8, 2026-4-8 20:17 , Processed in 0.046324 second(s), 21 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

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