標准輸入,輸出和錯誤
---------------------------------
文件文件 描述符
---------------------------------
輸入文件—標准輸入 0
輸出文件—標准輸出 1
錯誤輸出文件—標准錯誤 2
---------------------------------
COMMAND_OUTPUT > 2 # 將stdout重定向到一個文件. 3 # 如果這個文件不存在, 那就創建, 否則就覆蓋. 4 5 ls -lR > dir-tree.list 6 # 創建一個包含目錄樹列表的文件. 7 8 : > filename 9 # >操作, 將會把文件"filename"變為一個空文件(就是size為0). 10 # 如果文件不存在, 那么就創建一個0長度的文件(與'touch'的效果相同). 11 # :是一個占位符, 不產生任何輸出. 12 13 > filename 14 # >操作, 將會把文件"filename"變為一個空文件(就是size為0). 15 # 如果文件不存在, 那么就創建一個0長度的文件(與'touch'的效果相同). 16 # (與上邊的": >"效果相同, 但是某些shell可能不支持這種形式.) 17 18 COMMAND_OUTPUT >> 19 # 將stdout重定向到一個文件. 20 # 如果文件不存在, 那么就創建它, 如果存在, 那么就追加到文件后邊. 21 22 23 # 單行重定向命令(只會影響它們所在的行): 24 # -------------------------------------------------------------------- 25 26 1>filename 27 # 重定向stdout到文件"filename". 28 1>>filename 29 # 重定向並追加stdout到文件"filename". 30 2>filename 31 # 重定向stderr到文件"filename". 32 2>>filename 33 # 重定向並追加stderr到文件"filename". 34 &>filename 35 # 將stdout和stderr都重定向到文件"filename". 36 37 M>N 38 # "M"是一個文件描述符, 如果沒有明確指定的話默認為1. 39 # "N"是一個文件名. 40 # 文件描述符"M"被重定向到文件"N". 41 M>&N 42 # "M"是一個文件描述符, 如果沒有明確指定的話默認為1. 43 # "N"是另一個文件描述符. 44 45 #============================================================================== 46 47 # 重定向stdout, 一次一行. 48 LOGFILE=script.log 49 50 echo "This statement is sent to the log file, \"$LOGFILE\"." 1>$LOGFILE 51 echo "This statement is appended to \"$LOGFILE\"." 1>>$LOGFILE 52 echo "This statement is also appended to \"$LOGFILE\"." 1>>$LOGFILE 53 echo "This statement is echoed to stdout, and will not appear in \"$LOGFILE\"." 54 # 每行過后, 這些重定向命令會自動"reset". 55 56 57 58 # 重定向stderr, 一次一行. 59 ERRORFILE=script.errors 60 61 bad_command1 2>$ERRORFILE # Error message sent to $ERRORFILE. 62 bad_command2 2>>$ERRORFILE # Error message appended to $ERRORFILE. 63 bad_command3 # Error message echoed to stderr, 64 #+ and does not appear in $ERRORFILE. 65 # 每行過后, 這些重定向命令也會自動"reset". 66 #============================================================================== 67 68 69 70 2>&1 71 # 重定向stderr到stdout. 72 # 將錯誤消息的輸出, 發送到與標准輸出所指向的地方. 73 74 i>&j 75 # 重定向文件描述符i到j. 76 # 指向i文件的所有輸出都發送到j. 77 78 >&j 79 # 默認的, 重定向文件描述符1(stdout)到j. 80 # 所有傳遞到stdout的輸出都送到j中去. 81 82 0< FILENAME 83 < FILENAME 84 # 從文件中接受輸入. 85 # 與">"是成對命令, 並且通常都是結合使用. 86 # 87 # grep search-word <filename 88 89 90 [j]<>filename 91 # 為了讀寫"filename", 把文件"filename"打開, 並且將文件描述符"j"分配給它. 92 # 如果文件"filename"不存在, 那么就創建它. 93 # 如果文件描述符"j"沒指定, 那默認是fd 0, stdin. 94 # 95 # 這種應用通常是為了寫到一個文件中指定的地方. 96 echo 1234567890 > File # 寫字符串到"File". 97 exec 3<> File # 打開"File"並且將fd 3分配給它. 98 read -n 4 <&3 # 只讀取4個字符. 99 echo -n . >&3 # 寫一個小數點. 100 exec 3>&- # 關閉fd 3. 101 cat File # ==> 1234.67890 102 # 隨機訪問. 103 104 105 106 | 107 # 管道. 108 # 通用目的處理和命令鏈工具. 109 # 與">", 很相似, 但是實際上更通用. 110 # 對於想將命令, 腳本, 文件和程序串連起來的時候很有用. 111 cat *.txt | sort | uniq > result-file 112 # 對所有.txt文件的輸出進行排序, 並且刪除重復行. 113 # 最后將結果保存到"result-file"中.
command > filename 把標准輸出重定向到一個新文件中
command >> filename 把標准輸出重定向到一個文件中(追加)
command 1 > fielname 把標准輸出重定向到一個文件中
command > filename 2>&1 把標准輸出和標准錯誤一起重定向到一個文件中
command 2 > filename 把標准錯誤重定向到一個文件中
command 2 >> filename 把標准輸出重定向到一個文件中(追加)
command >> filename 2>&1 把標准輸出和標准錯誤一起重定向到一個文件中(追加)
command < filename >filename2 把command命令以filename文件作為標准輸入,以filename2文件作為標准輸出
command < filename 把command命令以filename文件作為標准輸入
command << delimiter 把從標准輸入中讀入,直至遇到delimiter分界符
command <&m 把文件描述符m作為標准輸入
command >&m 把標准輸出重定向到文件描述符m中
command <&- 把關閉標准輸入
