找回密码
 注册
查看: 11|回复: 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的区别1 v: \; O5 h. W3 g) `: B
. h' [4 u" c4 ]  Q

* M3 j$ e+ j  \- [% G3 n! \7 A2 j& L
一、区别:  o  @& o' l, [3 ?0 c( C
2>/dev/null
# B- D! s1 a7 h; T! R意思就是把错误输出到“黑洞”
& k& v1 Z( [. \7 ~, p1 z# n! _! k3 v* m
>/dev/null 2>&1
: Q" Q, J! g# a8 X% a+ c9 E- b默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”
. y% t1 y4 t6 I6 J$ I) x# y2 ?- a0 n* {: H# I+ d
2>&1 >/dev/null1 v+ ~* ~; u5 Y4 w( {$ @) h
意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕3 k2 W; h4 D0 }* u9 M
5 I" O, z6 G. m& g( |
二、解释:* h7 o9 ]& E3 B) O# y& X. @
1、文件描述符
3 m0 r. R- D" n$ J( c$ }/ `( dLinux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:. j; J; J, t4 N1 b
0——标准输入(stdin)
6 m; Q% L' C+ B  s& x* l* s6 @( e1——标准输出(stdout)
7 z+ b0 [9 {& `2——标准错误(stderr)5 S- n& I8 E8 Y9 i/ ~  ?+ p( n+ R

, w" I' s# g' S0 D- J标准输出——stdout3 j; D% V- [" ^- A5 Q
假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt% d1 U. B7 b& r& f+ L$ p7 D
在这里插入图片描述% k, a$ H/ r& H
错误输出——stderr
% ~; k% m  M7 }/ Z& c! d9 A按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。
( X& J9 G9 f8 \' F在这里插入图片描述8 S, Q+ M  o3 B! }- J
2、重定向7 Y$ y8 G$ X. q: [
重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:
) e$ _3 k( Q0 E% z  K$ O(1)、重定向标准输出stdout
. f% j+ @6 d) j  C# e, N在这里插入图片描述
3 @8 v9 m2 T1 n如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。
7 G) `7 n0 {8 G) m3 c, K/ h" p+ A6 i  b& Z. p
(2)、重定向标准错误stderr  _1 F- T, [& |" H
在这里插入图片描述6 o" T" @7 C9 L6 r% J4 s7 j. D
如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。
) t  T; P7 Y: s$ ?0 t4 y
/ `8 z* w  L0 _% [; g' _(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件
2 }5 `* l4 v; z. @+ hcmd 2> stderr.txt 1>stdout.txt
( X0 k8 A$ j/ Z! q& N
2 [) A- y" X% g; t(4)、也可以将stderr和stdout重定向到同一个文件! a' f7 @' k4 \+ q
cmd > output.txt 2>&1# L" h9 Z) Q( n. k8 ^1 f  E& j9 c
) o$ T( C8 v# \" `) G6 E
或采用下面的方法,可以少写几个字,能达到同样的效果
9 |) D9 Y8 M# F/ x1 S9 y1 f1 m) W) D- I  ]- E  `
cmd &> output.txt- N  X8 \, A" k; f7 f8 P

0 C" ^* j5 S1 U9 M+ v: a5 t5 Lcmd >& output.txt #两个表达式效果一样的  O: ?2 x4 b* `3 M6 _. W8 z
& p; B% j( b8 {3 |# ^9 H& X
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:46 , Processed in 0.019709 second(s), 21 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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