天天看點

重定向

IO重定向改變标準輸出的位置:分為輸出重定向和輸出重定向。

1.覆寫重定向 >

>:将目标檔案内的源内容覆寫掉。執行不存在的檔案,既可以建立新檔案。

範例:

# cat 1.txt

11111111111111111111

22222222222222222222

# echo -e  "aaaaaaaaaaaaa\nbbbbbbbbbbbbb" > 1.txt

aaaaaaaaaaaaa

bbbbbbbbbbbbb

2.追加重定向 >>

>>:在原檔案内容後面追加新内容。

# echo -e "11111111111111111111\n22222222222222222222" >> 1.txt

3.拒絕覆寫重定向 set -C

執行指令:set -C 之後,再執行覆寫重定向到已有檔案,就會報錯。執行追加重定向沒有影響。執行指令:set +C即可取消。

覆寫失敗

# set -C

# echo -e "11111111111111111111\n22222222222222222222" > 1.txt  

-bash: 1.txt: cannot overwrite existing file

追加成功。

取消set

# set +C

# echo "aaaaaaa" > 1.txt

aaaaaaa

4.錯誤重定向 2> 2>>

2>:錯誤覆寫重定向。

2>>:錯誤追加重定向。

如果指令執行錯誤,會有錯誤資訊,錯誤重定向可以把錯誤資訊,重定向到其他檔案中。

# cat 3 1.txt

cat: 3: 沒有那個檔案或目錄

# cat 3 1.txt 2> 2.txt

# cat 2.txt

5.标準和錯誤輸出到不同的位置

不管執行的正确與錯誤,都不想在螢幕上顯示内容,可以把标準和錯誤輸出到不同的檔案中去。

錯誤重定向到 2檔案。标準重定向到 2.txt檔案,适用于前面 1到4章符号。

# cat 1 1.txt  

cat: 1: 沒有那個檔案或目錄

# cat 1 1.txt 2>2 >2.txt  

# cat 2 2.txt          

6.标準和錯誤輸出到一個位置

其實在腳本運作中,不需要提示标準輸出和錯誤輸出,隻需要執行指令傳回值 $? 即可。把這些資料量放到"黑洞"裡 /dev/nell 中,如果想保留就指定一個檔案。

&>:合并覆寫重定向   >  加上 2>  等于  &>

&>>:合并追加重定向   >>  加上 2>>  等于  &>>

cmd  > file  2>&1:合并覆寫重定向

cmd  >> file  2>&1:合并追加重定向

意思就是錯誤輸出和标準輸出一樣的意思。

範例1:

# cat 2 2.txt &>3

# cat 3

# cat 2 2.txt &>>3

範例2:

# cat 2 2.txt >3 2>&1

# cat 2 2.txt >>3 2>&1

7.輸入重定向

<:把資料流遞交給前面的指令處理。

檔案内容:

hello

cat範例1:

# cat < 1.txt

tr範例2:

# tr [he] [HE] < 1.txt

HEllo

8.here document的用法 <<

here document:是一種特殊的重定向方式,他将關鍵字中間的内容作為參數,傳遞給指令。

cat  << EOF

> xxxxxx

> EOF

關鍵字EOF是可被替換的。

一定要頂格寫,前面不可以有空格。

關鍵字不會輸出。

cat  << EOF >file.txt

會把關鍵字之間的内容寫到file.txt檔案中,常用于腳本裡面建立檔案。

因為第一個關鍵字EOF前面有一個空格。

# cat << EOF

> hello

> HELLO

>  EOF

HELLO

EOF

# cat << EEE >1.txt

> EEE