深入理解 bash redirection 重定向

2021-06-29 07:58:49 字數 2987 閱讀 6534

➜  ganiks@bash-redirection  cat 123

11111111

22222222

33333333

➜ ganiks@bash-redirection cat 123 >> abc

➜ ganiks@bash-redirection echo

"one line" >> abc

#當cat不帶引數的時候,表示使用標準輸入作為輸入,這允許在標準輸入中鍵入相關的內容

➜ ganiks@bash-redirection cat >> abc

44444444

55555555

66666666^c # ctrl+c

➜ ganiks@bash-redirection cat abc

11111111

22222222

33333333

one line

44444444

55555555

66666666

參考文件

➜  ganiks@bash-redirection  cat > find.sh                                

find . -name "*" -print -exec grep "555" {} \;

^c➜ ganiks@bash-redirection sudo chmod +x find.sh

➜ ganiks@bash-redirection ./find.sh

.grep: .: 是乙個目錄

./abc

55555555

./nginx-v

./find.sh

find . -name "*" -print -exec grep "555" {} \;

./123

#第一種情況

➜ ganiks@bash-redirection ./find.sh 2>&1 > find1.log

grep: .: 是乙個目錄

grep: 輸入檔案 『./find1.log』 同時也作輸出

#第二種情況

➜ ganiks@bash-redirection ./find.sh > find2.log 2>&1

# 注意, 這裡的 2>&1 中間不能有空格

# 注意, 這裡的 2>&1 中間不能有空格

# 注意, 這裡的 2>&1 中間不能有空格

#結果1

➜ ganiks@bash-redirection cat find1.log

../abc

55555555

./nginx-v

./find.sh

find . -name "*" -print -exec grep "555" {} \;

./123

./find1.log

#結果2

➜ ganiks@bash-redirection cat find2.log

.grep: .: 是乙個目錄

./abc

55555555

./nginx-v

./find.sh

find . -name "*" -print -exec grep "555" {} \;

./123

./find1.log

55555555

find . -name "*" -print -exec grep "555" {} \;

./find2.log

grep: 輸入檔案 『./find2.log』 同時也作輸出

0 是 stdin

1 是 stdout

2 是 stderr

➜ ganiks@bash-redirection ./find.sh 2>&1 > find1.log

➜ ganiks@bash-redirection ./find.sh > find2.log 2>&1

這裡分析的關鍵是:一步一步分析,分析一步,輸出一步

第二種情況:

重定向的過程其實很簡單,但由於和直觀感受不一致,往往導致初學者在這裡犯很多錯誤。 參考文件

基本io重定向操作

➜  ganiks@bash-redirection  cat >> msgfile <<.

heredoc> this is the text of

heredoc> our message

heredoc> end with .

heredoc> . #這裡<<.表明以.為結束。因此無需使用^d,而改用.

➜ ganiks@bash-redirection cat msgfile

this is the text of

our message

end with .

檔案描述符在bash中比較少用,從0開始使用者表示進行的資料流,0表示標準輸入,1表示標準輸出,2表示標註錯誤輸出,其他從3開始。

最為常用的場景是將錯誤訊息輸出到某個檔案,可以加上2>file 到我們的命令中。

我們來看下面乙個指令碼的例子:

command > logfile

2>&1 &

下面可達到類似的效果:

command

2>&1 | tee

logfile &

錯誤輸出同樣適用標準輸出,通過pipe方式,見他們作為輸入執行tee logfile。tee命令將它的標準輸入copy至他的標準標準輸出以及引數所帶的檔案中。和上面的命令不一眼這裡即會在stdout 和logfile中同時輸出。

其他檔案描述字的重定向,例如<&n,通常用於從多個檔案中讀入或者寫出。

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

mysql 索引深入理解 深入理解MySql的索引

為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...