eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/null
命令的結果可以通過%>的形式來定義輸出/dev/null 代表空設備文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout標准輸出,系統默認值是1,所以">/dev/null"等同於"1>/dev/null"
2 表示stderr標准錯誤
& 表示等同於的意思,2>&1,表示2的輸出重定向等同於1
那么本文標題的語句:
1>/dev/null 首先表示標准輸出重定向到空設備文件,也就是不輸出任何信息到終端,說白了就是不顯示任何信息。
2>&1 接着,標准錯誤輸出重定向等同於標准輸出,因為之前標准輸出已經重定向到了空設備文件,所以標准錯誤輸出也重定向到空設備文件。
腳本只使用標准輸入、標准輸出和標准錯誤
Shell會自動為我們打開和關閉0、1、2這三個文件描述符,我們不需要顯式地打開或關閉它們。標准輸入是命令的輸入,默認指向鍵盤;標准輸出是命令的輸出,默認指向屏幕;標准錯誤是命令錯誤信息的輸出,默認指向屏幕。
如果沒有顯式地進行重定向,命令通過文件描述符0從屏幕讀取輸入,通過文件描述符1和2將輸出和錯誤信息輸出到屏幕。但如果我們想從其他文件(再次強調,I/O設備在Unix/Linux中也是文件)讀取輸入或產生輸出,就需要對0、1、2使用重定向了。其語法如下:
command < filename 把標准輸入重定向到filename文件中
command 0< filename 把標准輸入重定向到filename文件中
command > filename 把標准輸出重定向到filename文件中(覆蓋)
command 1> fielname 把標准輸出重定向到filename文件中(覆蓋)
command >> filename 把標准輸出重定向到filename文件中(追加)
command 1>> filename 把標准輸出重定向到filename文件中(追加)
command 2> filename 把標准錯誤重定向到filename文件中(覆蓋)
command 2>> filename 把標准輸出重定向到filename文件中(追加)
command > filename 2>&1 把標准輸出和標准錯誤一起重定向到filename文件中(覆蓋)
command >> filename 2>&1 把標准輸出和標准錯誤一起重定向到filename文件中(追加)
command < filename >filename2 把標准輸入重定向到filename文件中,把標准輸出重定向
到filename2文件中
command 0< filename 1> filename2 把標准輸入重定向到filename文件中,把標准輸出重定向
到filename2文件中
重定向的使用有如下規律:
1)標准輸入0、輸出1、錯誤2需要分別重定向,一個重定向只能改變它們中的一個。
2)標准輸入0和標准輸出1可以省略。(當其出現重定向符號左側時)
3)文件描述符在重定向符號左側時直接寫即可,在右側時前面加&。
4)文件描述符與重定向符號之間不能有空格!
REF:
http://blog.sina.com.cn/s/blog_4aae007d010192qc.html
http://blog.itpub.net/35489/viewspace-702314/
1. 標准輸入的控制
語法:命令< 文件將文件做為命令的輸入。
例如:
mail -s “mail test” wesongzhou@hotmail.com < file1 將文件file1 當做信件的內容,主
題名稱為mail test,送給收信人。
2. 標准輸出的控制
語法:命令> 文件將命令的執行結果送至指定的文件中。
例如:
ls -l > list 將執行“ls -l” 命令的結果寫入文件list 中。
語法:命令>! 文件將命令的執行結果送至指定的文件中,若文件已經存在,則覆蓋。
例如:
ls -lg >! list 將執行“ls - lg” 命令的結果覆蓋寫入文件list 中。
語法:命令>& 文件將命令執行時屏幕上所產生的任何信息寫入指定的文件中。
例如:
cc file1.c >& error 將編譯file1.c 文件時所產生的任何信息寫入文件error 中。
語法:命令>> 文件將命令執行的結果附加到指定的文件中。
例如:
ls - lag >> list 將執行“ls - lag” 命令的結果附加到文件list 中。
語法:命令>>& 文件將命令執行時屏幕上所產生的任何信息附加到指定的文件中。
例如:
cc file2.c >>& error 將編譯file2.c 文件時屏幕所產生的任何信息附加到文件error 中。
關於輸入、輸出和錯誤輸出
在字符終端環境中,標准輸入/標准輸出的概念很好理解。輸入即指對一個應用程序或命令的輸入,無論是從鍵盤輸入還是從別的文件輸入;輸出即指應用程序或命令產生的一些信息;與 Windows 系統下不同的是,Linux 系統下還有一個標准錯誤輸出的概念,這個概念主要是為程序調試和系統維護目的而設置的,錯誤輸出於標准輸出分開可以讓一些高級的錯誤信息不干擾正常的輸出信息,從而方便一般用戶的使用。
在 Linux 系統中:標准輸入(stdin)默認為鍵盤輸入;標准輸出(stdout)默認為屏幕輸出;標准錯誤輸出(stderr)默認也是輸出到屏幕(上面的 std 表示 standard)。在 BASH 中使用這些概念時一般將標准輸出表示為 1,將標准錯誤輸出表示為 2。下面我們舉例來說明如何使用他們,特別是標准輸出和標准錯誤輸出。
輸入、輸出及標准錯誤輸出主要用於 I/O 的重定向,就是說需要改變他們的默認設置。先看這個例子:
$ ls > ls_result
$ ls -l >> ls_result
上面這兩個命令分別將 ls 命令的結果輸出重定向到 ls_result 文件中和追加到 ls_result 文件中,而不是輸出到屏幕上。">"就是輸出(標准輸出和標准錯誤輸出)重定向的代表符號,連續兩個 ">" 符號,即 ">>" 則表示不清除原來的而追加輸出。下面再來看一個稍微復雜的例子:
$ find /home -name lost* 2> err_result
這個命令在 ">" 符號之前多了一個 "2","2>" 表示將標准錯誤輸出重定向。由於 /home 目錄下有些目錄由於權限限制不能訪問,因此會產生一些標准錯誤輸出被存放在 err_result 文件中。大家可以設想一下 find /home -name lost* 2>>err_result 命令會產生什么結果?
如果直接執行 find /home -name lost* > all_result ,其結果是只有標准輸出被存入 all_result 文件中,要想讓標准錯誤輸出和標准輸入一樣都被存入到文件中,那該怎么辦呢?看下面這個例子:
$ find /home -name lost* > all_result 2>& 1
上面這個例子中將首先將標准錯誤輸出也重定向到標准輸出中,再將標准輸出重定向到 all_result 這個文件中。這樣我們就可以將所有的輸出都存儲到文件中了。為實現上述功能,還有一種簡便的寫法如下:
$ find /home -name lost* >& all_result
如果那些出錯信息並不重要,下面這個命令可以讓你避開眾多無用出錯信息的干擾:
$ find /home -name lost* 2> /dev/null
再試驗一下如下幾種重定向方式,看看會出什么結果,為什么?
$ find /home -name lost* > all_result 1>& 2
$ find /home -name lost* 2> all_result 1>& 2
$ find /home -name lost* 2>& 1 > all_result
另外一個非常有用的重定向操作符是 "-",請看下面這個例子:
$ (cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
該命令表示把 /source/directory 目錄下的所有文件通過壓縮和解壓,快速的全部移動到 /dest/directory 目錄下去,這個命令在 /source/directory 和 /dest/directory 不處在同一個文件系統下時將顯示出特別的優勢。
下面還幾種不常見的用法:
n<&- 表示將 n 號輸入關閉
<&- 表示關閉標准輸入(鍵盤)
n>&- 表示將 n 號輸出關閉
>&- 表示將標准輸出關閉
------------
例子:
$ make >& compile.log
將編譯u-boot時屏幕產生的所有信息重定向到compile.log文件中;
$ make > compile.log 2>&1
首先將標准錯誤輸出也重定向到標准輸出中,再將標准輸出重定向到 compile.log 這個文件中。這樣我們就可以將所有的輸出都存儲到文件中了。
$ make 2> compile.log
將標准出錯輸出信息寫入compile.log,但標准輸出則在屏幕上顯示。此時屏幕上不顯示編譯時的錯誤信息,這些信息將寫入compile.log中;
$ make 1> compile.log
將標准輸出信息寫入compile.log,但標准出錯輸出則在屏幕上顯示。此時屏幕上不顯示編譯時的正確信息,這些信息將寫入compile.log中。
echo "pls enter the para" >&2
把你的錯誤交給標准錯誤
REF:
http://book.51cto.com/art/200805/73657.htm
http://zqwt.012.blog.163.com/blog/static/1204468420103272857116/