回覆列表
  • 1 # 使用者1740050079327

    Unix/Linux/BSD 都有三個特別檔案,分別

    1)標準輸入 即 STDIN , 在 /dev/stdin ,

    一般指鍵盤輸入, shell裡代號是 0

    2) 標準輸出 STDOUT, 在 /dev/stdout,

    一般指終端(terminal), 就是顯示器, shell裡代號是 1

    3) 標準錯誤 STDERR, 在 /dev/stderr

    也是指終端(terminal), 不同的是, 錯誤資訊送到這裡

    shell裡代號是 2

    2, 3用些例子再表達一下

    User@User-PC ~

    $ ls /dev/stdin

    /dev/stdin@

    User@User-PC ~

    $ ls -l /dev/std*

    lrwxrwxrwx 1 User Users 15 Mar 1 2008 /dev/stderr -> /proc/self/fd/2

    lrwxrwxrwx 1 User Users 15 Mar 1 2008 /dev/stdin -> /proc/self/fd/0

    lrwxrwxrwx 1 User Users 15 Mar 1 2008 /dev/stdout -> /proc/self/fd/1

    就是這些東西了,呵呵

    User@User-PC ~

    $ ls 1> log1.txt

    User@User-PC ~

    $ cat log1.txt

    Mail/

    News/

    a.txt

    aa*

    awkscr

    b.txt

    bb*

    bin/

    cc

    cgitest.rex*

    dd*

    irc-sh*

    junk

    lib/

    log1.txt

    lynx.cfg

    matrix/

    perlscr*

    pp*

    rexx_script/

    rrr

    testawk

    tmp/

    trash

    將標準輸出導向到檔案, 縮寫就是 ls > log1.txt

    User@User-PC ~

    $ ls llll 1> log2.txt

    ls: 無法存取 llll: No such file or directory

    再次執行,但這次沒有這個檔案llll, 出現錯誤訊息

    User@User-PC ~

    $ cat log2.txt

    User@User-PC ~

    $ file log2.txt

    log2.txt: empty

    輸出沒有導向到檔案,檔案是空檔案

    User@User-PC ~

    $ ls llll 2> log2.txt

    User@User-PC ~

    $ cat log2.txt

    ls: 無法存取 llll: No such file or directory

    User@User-PC ~

    $

    再次執行剛才的命令,只是將 1> log2.txt 改為 2> log2.txt

    這次就成功把錯誤訊息導向至檔案了,呵呵,

    就是這樣

    所以,將標準輸出和標準錯誤 一同導向到一個檔案裡,就得這樣表達

    命令 2>&1 > 檔案, 如

    User@User-PC ~

    $ echo 123 | if grep -E "[0-9]+" 2>&1 > /dev/null ; then echo "This is number."; fi

    This is number.

    grep 標準輸出和標準錯誤 都導向到系統‘黑洞’,不會再螢幕上顯示什麼

    , 明白了吧? 呵呵

  • 中秋節和大豐收的關聯?
  • 什麼地方做義工好?