萬盛學電腦網

 萬盛學電腦網 >> Linux教程 >> bash重定向詳解

bash重定向詳解

    首先我們先回顧下bash現有的重定向符號
    1.重定向輸入輸出,目標是文件word
    [n]<word    默認n為0
    [n]>word    默認n為1
    [n]>|word   默認n為1    noclobber選項有關,直接例子就明白它的用處了
    [n]》word   默認n為1
    igi@igi-debian:~$ rm -f testfile
    igi@igi-debian:~$ touch testfile
    igi@igi-debian:~$ cat testfile
    igi@igi-debian:~$ set -o noclobber
    igi@igi-debian:~$ echo 2 >testfile
    bash: testfile: cannot overwrite existing file
    igi@igi-debian:~$ echo 2 >| testfile
    igi@igi-debian:~$ cat testfile
    2
    2.重定向標准錯誤和標准輸出到指定文件描述符
    &>word      更通用
    >&word
    >word 2>&1
    追加輸出
    &》word     沒有》&word的表達方法
    》word 2>&1
    3.Here Documents
    《[-]word
    here-document
    delimiter
    -符號將刪除所有行開頭的tab符
    4.Here Strings
    <<<word
    5.復制文件描述符
    [n]<&word   默認n為0,如果為數字,必須得為打開的文件描述符
    [n]<&-      關閉文件描述符
    [n]>&word   默認n為1,如果為數字,必須得為打開的文件描述符
    [n]>&-      關閉文件描述符
    6.移動文件描述符
    [n]<&digit- 默認n為0
    [n]>&digit- 默認n為1
    7.以讀寫方式打開文件描述符
    [n]<>word   文件不在時會被創建
    如果要深刻理解重定向,先要明白以下2點
    1.shell(bash或者csh等)負責重定向,對於程序或者函數,這一切都是透明的,它只管輸入輸出,至於從哪輸入哪輸出,是shell解釋器負責
    2.shell命令解析過程中,在實際執行命令前,IO重定向先設置好
    我們來看以下的例子
    1.'echo 1 a1 >a2′ 與 'echo 1 >a2 a1′
    igi@igi-debian:~$ echo 1 a1 >a2
    igi@igi-debian:~$ cat a2
    1 a1
    igi@igi-debian:~$ rm a2
    igi@igi-debian:~$ echo 1 >a2 a1
    igi@igi-debian:~$ cat a2
    1 a1
    IO重定向是在命令執行前設置好,所以上面兩種情況,最後的效果一樣,bash先把輸出重定向到a2文件,再執行'echo 1 a1′
    2.'ls nothisfile >res 2>&1′ 與 'ls nothisfile 2>&1 >res'
    igi@igi-debian:~/rtest$ ls nothisfile
    ls: cannot access nothisfile: No such file or directory
    igi@igi-debian:~/rtest$ ls nothisfile >res 2>&1
    igi@igi-debian:~/rtest$ cat res
    ls: cannot access nothisfile: No such file or directory

copyright © 萬盛學電腦網 all rights reserved