找回密码
 注册
查看: 10|回复: 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的区别  L7 k1 o+ s2 e. p

8 y7 Y3 P4 X' {. u8 V  w; ^5 t+ V! Y+ S% w4 c; E4 v5 Q
; E8 M8 }- x1 L+ z
一、区别:
& u, T* h/ I: Z- Q: H" S& Z' G2>/dev/null
6 a" o& _: M1 U1 i8 v$ @意思就是把错误输出到“黑洞”
4 J/ U, e5 n. t& m0 s. i
0 v9 m) h; l  B- y; X' |>/dev/null 2>&1/ F# I5 S/ H5 I! ?
默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞”  ~/ m6 {2 J. y' s8 w
- V/ B, `- U0 z/ ?2 }/ _  {; V
2>&1 >/dev/null: ]: \0 q/ F5 ?' v1 V- `) s7 M
意思就是把错误输出2重定向到标准出书1,也就是屏幕,标准输出进了“黑洞”,也就是标准输出进了黑洞,错误输出打印到屏幕  B* O: a& Z( S

1 `/ s/ N1 K2 o3 @# s8 Q二、解释:# P- y' X- N5 s/ V3 d9 R' `
1、文件描述符
) N. p3 o5 P5 c  LLinux系统预留可三个文件描述符:0、1和2,他们的意义如下所示:
/ x6 u  n9 Y/ j1 O# P1 K- h1 e0——标准输入(stdin)
* s8 v6 f6 r' W: [( v3 D1——标准输出(stdout)% U$ e" a" Y( B
2——标准错误(stderr)
" K( j$ `6 O( b& W' A; }$ t$ k  Y/ I/ ^# Q
标准输出——stdout
( x. d/ c* r9 f假设:在当前目录下,有且只有一个文件名称为ljl.txt的文件,这时我们运行这个命令【ls ljl.txt】,就会获得一个标准输出stdout的输出结果:ljl.txt. D5 X$ B% O# }9 _
在这里插入图片描述
4 h1 }" |3 s8 f" }. k* V7 s错误输出——stderr
  D, J1 F. m( d按照上面的假设,我们运行另一条命令【ls gss.txt】,这样我们就会获得一个标准错误stderr的输出结果“ls:无法访问gss.txt:没有那个文件或目录”。
$ S! g% {# S7 k6 e9 e) |, F在这里插入图片描述
, N8 z9 o( e8 A' h* j2、重定向5 w5 ^: v; k+ N* C" P# r
重定向的符号有两个:>或>>,两者的区别是:前者会先清空文件,然后再写入内容,后者会将重定向的内容追加到现有文件的尾部。举个例子:" g" Q/ T7 \4 X. i
(1)、重定向标准输出stdout
* _* y  ^! @( s/ {& A在这里插入图片描述+ y" z5 s% R0 H0 u# E! W2 q, V% P
如上图所示,对比没有添加重定向的操作,这条命令在使用之后并没有将123.txt打印到屏幕。在紧接的cat操作后,可以发现本来应该被输出的内容被记录到stdout.txt中。; y- T: V; v+ x  ?; r4 y
9 G- [4 b6 V" {1 A1 e5 k7 r
(2)、重定向标准错误stderr
8 D' s+ |# l- ?$ u在这里插入图片描述; T5 t* b8 L2 q
如上图所示,文件描述符2,标准错误的重定向也是同样的原理被记录在了文件stderr.txt这个文件里面了。' Y# C0 U1 r4 Q; X
$ j7 w- |& H6 h2 Q: y" i
(3)、可以将stderr单独定向到一个文件,stdout重定向到另一个文件$ O! S& U1 I4 J& X- c5 S2 w
cmd 2> stderr.txt 1>stdout.txt" e0 g  N! A. ]+ t: ~7 A7 a

$ C0 Z5 f! q9 f  c# B* O(4)、也可以将stderr和stdout重定向到同一个文件' v7 A+ F6 g- H6 ^" U/ c3 N7 I* Q: _
cmd > output.txt 2>&1
# B; n- S% i9 _7 o; Y0 q9 Z( V' R2 }- S0 L6 W& [8 q0 v
或采用下面的方法,可以少写几个字,能达到同样的效果
$ u! S) n2 O  E% i! A& E/ c- [6 e& J+ T" y% m' f; L) m' H2 T6 Z
cmd &> output.txt
, I6 ~3 Q9 d$ I# b2 v: M( N( l
- Q" u& h$ e( O. P) o% u( lcmd >& output.txt #两个表达式效果一样的" s3 l$ l, [; ?! h$ s+ q' i
  T& _" \* v1 a' a7 J3 w
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:44 , Processed in 0.016087 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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