一、概述
(1)重定向命令列表
命令 | 說明 |
---|---|
command > file | 將輸出重定向到 file |
command | 將輸入重定向到 file |
command >> file | 將輸出以追加的方式重定向到 file |
n > file | 將文件描述符為 n 的文件重定向到 file |
n >> file | 將文件描述符為 n 的文件以追加的方式重定向到 file |
n >& m | 將輸出文件 m 和 n 合并 |
n | 將輸入文件 m 和 n 合并 |
將開始標記 tag 和結束標記 tag 之間的內容作為輸入 |
(2)文件描述符
-
0:通常是標準輸入(STDIN)
-
1:是標準輸出(STDOUT)
-
2:是標準錯誤輸出(STDERR)
二、輸出重定向
(1)命令解析
command?>?file #執行command然后將輸出的內容存入file。
注意:
file中的內容將會被新內容代替掉,如果不想被全部替代掉而是追加到文件末尾,那就使用>>操作符。
(2)實例解析
[root@localhost?~]#?w ?20:41:36?up?55?days,??5:17,??1?user,??load?average:?0.00,?0.01,?0.05 USER?????TTY??????FROM?????????????LOGIN@???IDLE???JCPU???PCPU?WHAT root?????pts/0????223.166.20.53????20:24????0.00s??0.05s??0.00s?w [root@localshost?~]#?w?>?users?#w命令執行后的結果輸出到users文件中 [root@localshost?~]#?ll -rw-r--r--?1?root?root??204?Jan??3?20:41?users [root@localshost?~]#?cat?users?#查看users文件內容,正是w命令執行后的輸出結果 ?20:41:58?up?55?days,??5:17,??1?user,??load?average:?0.00,?0.01,?0.05 USER?????TTY??????FROM?????????????LOGIN@???IDLE???JCPU???PCPU?WHAT root?????pts/0????223.166.20.53????20:24????6.00s??0.05s??0.00s?w [root@localshost?~]#?who root?????pts/0????????2021-01-03?20:24?(223.166.20.53) [root@localshost?~]#?who?>?users?#將who命令執行結果輸出重定向到users文件 [root@localshost?~]#?cat?users?#發現users文件中原先w命令的輸出內容被who命令覆蓋了 root?????pts/0????????2021-01-03?20:24?(223.166.20.53) [root@localshost?~]#?echo?"Hello?world"?>>?users?#使用>>操作符則會追加在后面輸出 [root@localshost?~]#?cat?users root?????pts/0????????2021-01-03?20:24?(223.166.20.53) Hello?world [root@localshost?~]#
注意:
上面實例中很多命令行出現了兩個#:
-
第一個#表示的是當前用戶為root用戶(當是其他用戶時這里會是$符);
-
第二個#在上面則表示的是注釋的意思。
三、輸入重定向
1、命令解析
unix命令也可以從文件中獲取輸入,語法為:
command?<p><strong>注意:</strong> </p><p>輸出重定向是大于號(>),輸入重定向是小于號(</p><h4>2、實例解析</h4><pre class="brush:bash;">[root@localhost?~]#?wc?-l?users 2?users #wc指令可以計算文件的Byte數、字數、或是行/列數,若不指定文件名稱、或是所給予的文件名為"-",則wc指令會從標準輸入設備讀取數據。 [root@localhost?~]#?wc?-l?<p><strong>注意:</strong> </p><p>第一個例子,會輸出文件名; </p><p>第二個不會,因為它僅僅知道從標準輸入讀取內容。</p><pre class="brush:bash;">command??outfile #同時替換輸入和輸出,執行command,從文件infile讀取內容,然后將輸出寫入到outfile中。 #理解成,從標準輸入中獲取內容(輸入重定向到infile)作為標準輸出(輸出重定向到outfile)。
四、深入理解重定向
上面文件描述符中已經簡單介紹過標準輸入、標準輸出和標準錯誤輸出等,下面再詳細講解。
1、簡介
一般情況下,每個 Unix/linux 命令運行時都會打開三個文件:
1)標準輸入文件(stdin):
stdin的文件描述符為0,Unix程序默認從stdin讀取數據。
2)標準輸出文件(stdout):
stdout 的文件描述符為1,Unix程序默認向stdout輸出數據。
3)標準錯誤文件(stderr):
stderr的文件描述符為2,Unix程序會向stderr流中寫入錯誤信息。
默認情況下,command > file 將 stdout 重定向到 file,command
2、命令詳解
command?2>file #stderr?重定向到?file command?2>>file #stderr?追加到?file?文件末尾 command?>?file?2>&1 command?>>?file?2>&1 #stdout?和?stderr?合并后重定向到?file command?file2 #對?stdin?和?stdout?都重定向 #command?命令將?stdin?重定向到?file1,將?stdout?重定向到?file2
五、Here Document
Here Document 是 Shell 中的一種特殊的重定向方式,用來將輸入重定向到一個交互式 Shell 腳本或程序。
1、語法
它的基本的形式如下:
command?<p><strong>注意:</strong></p><p>結尾的delimiter 一定要頂格寫,前面不能有任何字符,后面也不能有任何字符,包括空格和 tab 縮進。</p><p>開始的delimiter前后的空格會被忽略掉。</p><h4>2、實例解析</h4><p>EOF是END Of File的縮寫,表示自定義終止符。既然可以自定,因此EOF并非具有固定值,可以隨意設置別名,例如在Linux中,按下Ctrl-D可作為EOF代替。</p><p>EOF一般會配合cat能夠多行文本輸出。</p><p><strong>實例如下:</strong></p><pre class="brush:bash;">[root@localhost?~]#?wc?-l??a >?b >?c >?d >?e >?EOF 5?#輸入內容為5行 [root@localhost?~]#?cat??a >?b >?c >?d >?e >?f >?EOF a b c d e f
EOF也是可以自定義如下所示:
[root@iZ2ze95cxr3kx9il409khtZ?~]#?cat??a >?b >?c >?d >?CCC a b c d
執行腳本輸入的時候就可以用如下形式:
#擁有大量輸入的時候可以用下面的形式,將標準輸入的內容重定向到(輸入到)test.sh文件中。 [root@localhost?~]#?cat?test.sh? >?123123123 >?3452354345 >?asdfasdfs >?EOF [root@localhost?~]#?cat?test.sh? 123123123 3452354345 asdfasdfs [root@localhost?~]#
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END