本篇重點
- 基本重定向用法:<、<<、>、>>、 2>、2>>
- 重定向的判讀方式
- 重定向符號的前後順序不影響命令的結果
- 特殊重定向用法:/dev/null、&>、 2>&1 、 1>&2
在 Linux 中,資料重定向是一個非常重要且強大的功能。它可以將命令的輸入或輸出重定向到不同的文件或設備,讓我們能更靈活地處理資料。
基本重定向用法
標準輸入
<
輸入重定向
將文件內容作為命令輸入
範例
1 | 4 |
1 | # 將 number.txt 文件的內容作為 sort 命令的輸入,並對內容進行排序 |
<<
多行輸入重定向
將多行文字作為命令的輸入,直到遇到指定的結束標記
範例
1 | # 將多行文字作為 cat 命令的輸入,並將這些文字輸出到終端 |
標準輸出
>
輸出重定向
將命令的標準輸出重定向到文件,會覆蓋文件的原有內容
範例
1 | # echo 命令的輸出寫入到 output.txt 文件中,如果文件已經存在,會覆蓋原有內容。 |
>>
附加重定向
將命令的標準輸出附加到文件末尾,不會覆蓋文件的原有內容
範例
1 | # 將 echo 命令的輸出附加到 output.txt 文件的末尾 (延續上一個範例) |
錯誤輸出
2>
錯誤輸出重定向
將命令的錯誤輸出重定向到文件,會覆蓋文件的原有內容
範例
1 | # non_existing_file 是一個不存在的檔案 |
2>>
錯誤輸出附加重定向
將命令的錯誤輸出附加到文件末尾,不會覆蓋文件的原有內容
範例
1 | # non_existing_file 是一個不存在的檔案 |
綜合應用
標準輸入結合標準輸出
1 | # 使用多行輸入重定向搭配輸出重定向 |
標準輸出結合錯誤輸出
1 | # non_existing_file 是一個不存在的檔案 |
重定向的判讀方式
[重定向符號] + [文件或字串]
根據重定向符號和文件或字串來判斷,因此符號的前後順序不影響命令的結果
cat < input.txt > output.txt
可以分解為:
< input.txt
:這部分將input.txt
的內容重定向到cat
命令的標準輸入> output.txt
:這部分將cat
命令的標準輸出重定向到output.txt
Shell 會先解析重定向符號,再執行 cat
命令,從 input.txt
讀取內容並將其寫入 output.txt
因此不管是 cat < input.txt > output.txt
或是 cat > output.txt < input.txt
結果都是一樣的!符號的前後順序不影響命令的結果。
特殊重定向用法
/dev/null
可以視為垃圾桶,任何資料重定向給它就會丟棄
範例
1 | # non_existing_file 是一個不存在的檔案 |
&>
將命令的標準輸出和錯誤輸出都重定向到同一個文件
範例
1 | # non_existing_file 是不存在的檔案 |
2>&1、1>&2
- 2>&1 表示將標準錯誤輸出重定向到標準輸出
- 1>&2 表示將標準輸出輸出重定向到錯誤輸出
範例
1 | hello |
2>&1
1 | # non_existing_file 是不存在的檔案 |
1>&2
1 | # non_existing_file 是不存在的檔案 |
結論
了解並熟悉資料輸出重定向的用法,能夠讓我們更靈活地處理和管理命令的輸入輸出。以下是一些需要注意的地方:
- 依不同的需求,使用不同的輸出方式
>
和2>
會覆蓋輸出檔案原本的內容。>>
和2>>
會將輸出附加到檔案原本的內容末尾。
- 重定向符號的前後順序不影響命令的結果
如果你有其他有趣的用法或技巧,歡迎在下方留言分享!