在Linux的shell脚本或者命令中,1 表示正常输出,2 表示错误输出。
如果是 <command> 1>normal.log 2>error.log命令执行,首先屏幕上不再显示输出内容,正常的输出内容被重定向到normal.log,提示出错的输出内容被重定向到error.log中。
在表达式“2>&1”中,因为其格式与平常见到的不一样,会导致很难理解,和记不住的问题。
现在在这里做一个理清。
在tmp目录下建立如下的目录树:
tmp.
│ d.txt
│
├─1
│ a.txt
│ b.txt
│ c.txt
│
└─2
其中c.txt的read权限已经去掉。
-rw-rw-r-- 1 username units 10 2014-01-22 20:39 b.txt
-rw-rw-r-- 1 username units 9 2014-01-22 20:39 a.txt
--w--w---- 1 username units 0 2014-01-22 20:39 c.txt
执行命令如下。
[username@hostname:tmp]$ ls
1/ 2/ d.txt
[username@hostname:tmp]$ grep -rn dde .
grep: ./1/c.txt: Permission denied
./1/b.txt:3:dde
./1/a.txt:1:abc/dde
./d.txt:5:dde
[username@hostname:tmp]$ grep -rn dde . 2>error.log1>normal.log
[username@hostname:tmp]$ vi error.log
[username@hostname:tmp]$ cat error.log
grep: ./1/c.txt: Permission denied
[username@hostname:tmp]$ cat normal.log
./1/b.txt:3:dde
./1/a.txt:1:abc/dde
./d.txt:5:dde
[username@hostname:tmp]$ grep -rn dde . 2>error.log1>normal.log 2>&1 all.log
[username@hostname:tmp]$ cat all.log
cat: all.log: No such file or directory
[username@hostname:tmp]$ grep -rn dde . 2>error.log1>normal.log 2>&1 > all.log
[username@hostname:tmp]$ cat all.log
./1/b.txt:3:dde
./1/a.txt:1:abc/dde
./d.txt:5:dde
[username@hostname:tmp]$ grep -rn dde . 2>error.log1>normal.log > all.log 2>&1 #从这里可以看出,2>&1是在后面的,它修饰其前面的重定向操作。
[username@hostname:tmp]$ cat all.log
grep: ./1/c.txt: Permission denied
./1/b.txt:3:dde
./1/a.txt:1:abc/dde
./d.txt:5:dde
[username@hostname:tmp]$