應用背景devnull 1 2的介紹把錯誤輸出和標準輸出都導入日志testlog里屏蔽標準輸出和錯誤輸出信息tee命令如何把標準輸出和錯誤輸出都導入testlog里
如下例所示,aa是不識別的命令。 在執行./test.sh時,輸出兩行,第一行表示錯誤輸出;第二行表示標準輸出。 如果把腳本test.sh執行的所有信息,寫入腳本日志test.log,那么就出現了人為偏差,腳本日志不包含錯誤輸出的內容;這樣不方便腳本執行的debug日志需求。
[qilei@localhost ~]$ cat ./test.sh #!/bin/bashaadate[qilei@localhost ~]$ ./test.sh ./test.sh: line 2: aa: command not foundMon Mar 6 05:54:00 PST 2017[qilei@localhost ~]$ ./test.sh > test.log./test.sh: line 2: aa: command not found[qilei@localhost ~]$ cat test.log Mon Mar 6 05:54:10 PST 2017/dev/null :代表空設備文件
> :代表重定向到哪里,例如:echo "123" > /home/123.txt1 :表示stdout標準輸出,系統默認值是1,所以">/dev/null"等同于"1>/dev/null"2 :表示stderr標準錯誤& :表示等同于的意思,2>&1,表示2的輸出重定向等同于12>&1。2>&1,意思是錯誤輸出等同于標準輸出。所以使得./test.sh > test.log,可以把標準輸出和錯誤輸出全部導入日志test.log里。注意:2>&1,中間不能有空格。注意:2>&1,必須寫在最后,否則會失去原有意義。tee命令,不能替代>重定向命令[qilei@localhost ~]$ ./test.sh > test.log 2>&1[qilei@localhost ~]$ cat test.log ./test.sh: line 2: aa: command not foundMon Mar 6 06:00:29 PST 2017[qilei@localhost ~]$ ./test.sh | tee test.log 2>&1./test.sh: line 2: aa: command not foundMon Mar 6 06:00:41 PST 2017[qilei@localhost ~]$ cat test.log Mon Mar 6 06:00:41 PST 2017如下例所示, 1. /dev/null是空文件,就是為了屏蔽輸出而已。 2. > /dev/null,默認是把標準輸出屏蔽,但不能屏蔽錯誤輸出。等同于 1 > /dev/null 3. 2 > /dev/null,默認是把錯誤輸出屏蔽,但不能屏蔽標準輸出。 4. 2 > /dev/null,2和>之間可以有空格。與2&>1有些不同。具體原因先不管了。
tee命令,如何把標準輸出和錯誤輸出都導入test.log里?下例解決。 1. 注意,2>&1 要放在tee命令之前。
新聞熱點
疑難解答