1、輸入輸出代碼
0 -- 標準輸入(stdin)
1 -- 標準輸出(stdout)
2 -- 標準錯誤輸出(stderr)
2、輸入重定向
命令 < file 從文件file讀取
命令 < file > file2 從文件file讀取并重定向至file2
命令 << 定界符,從標準輸入讀入,以自定義的定界符結(jié)束
[root@70 data]# cat <<EOF > cc.log
> abc
> 123
> xyz
> EOF
[root@70 data]# cat cc.log
abc
123
xyz
[root@70 data]#
3、輸出重定向
| 操作符 | 功能說明 |
|---|---|
| 1> 或 > | 把STDOUT重定向到文件 |
| 2> | 把STDERR重定向到文件 |
| &> | 把標準輸出和錯誤都重定 |
| >& | 與&>功能一致,推薦使用 &> |
注意:如果設(shè)置了:
set -C 禁止覆蓋已有文件內(nèi)容(新文件可以),保留追加功能,但是仍可以使用 >| 強制覆蓋
set +C 恢復(fù)已有文件覆蓋功能
4、2>&1 、1>&2、>&、&> 使用
[root@centos8 ~]#ls /data /xxx > /data/all.log 2>&1
[root@centos8 ~]#ls /data /xxx 2> /data/all.log 1>&2
[root@centos8 ~]#ls /data /xxx &> /data/all.log
[root@centos8 ~]#ls /data /xxx >& /data/all.log
[root@centos8 ~]#ls /data /xxx 2>&1 > /data/all.log
分析:
ls /data /xxx > /data/all.log 2>&1
原先 1> 指向終端屏幕輸出
其中 > /data/all.log 定義將 1> 重定向到文件
2>&1 將錯誤輸出定向到 1>,故2 和 1都指向文件執(zhí)行輸出
ls /data /xxx 2> /data/all.log 1>&2
原先 2> 指向終端屏幕錯誤輸出
其中 2> /data/all.log 定義將 2> 重定向到文件
1>&2 將標準輸出定向到 2>,故1 和 2都指向文件執(zhí)行輸出
ls /data /xxx &> /data/all.log
&> 是簡要寫法
/data /xxx >& /data/all.log
與 &> 功能一致
ls /data /xxx 2>&1 > /data/all.log
原先 1 和 2 都指向終端屏幕輸出
2>&1 將 2 指向1,但是此時 1 仍指向屏幕,所以 2 指向了屏幕
最后的 > /data/all.log 將標準輸出1指向文件。
故最終標準輸出1指向文件,錯誤輸出2指向屏幕
總結(jié):輸出重定向,無論是標準輸出還是錯誤輸出必須先定義指定文件后才能指定"標準/錯誤輸出" 合并輸出到同一文件,順序顛倒可能會導(dǎo)致"標準/錯誤輸出" 無法合并輸出到同一文件。