Bash 重定向

2020-06-19 13:56 更新

當(dāng)一個命令執(zhí)行時,通常從“標(biāo)準(zhǔn)輸入”讀取輸入,在默認(rèn)情況下,該“標(biāo)準(zhǔn)輸入”為您的終端。以此類比,當(dāng)一個命令將其輸出寫入到“標(biāo)準(zhǔn)輸出”中,在默認(rèn)情況下,該“標(biāo)準(zhǔn)輸出”同為您的終端。重定向就是將發(fā)送目標(biāo):終端,更改成指定的文件。

輸出重定向

由于>>>會將輸出從終端重定向到指定文件,因此均不會在終端打印輸出。>>>的功能區(qū)別,如下所示:

  1. >會以命令中的寫入內(nèi)容覆蓋原文件內(nèi)容。如果指定的文件不存在,那么它將會創(chuàng)建一個以指定文件名命名的新文件,并執(zhí)行寫入操作。

示例:

    #!/bin/bash


    writefile=WriteFile.txt


    $ echo "編程獅:hgci.cn" > $writefile


    #使用 cat 命令打印文件內(nèi)容
    $ cat $writefile

執(zhí)行后得到以下結(jié)果:

    編程獅:hgci.cn

  1. >>會將命令中的寫入內(nèi)容附加到原文件內(nèi)容末尾。如果指定的文件不存在,那么它將會創(chuàng)建一個以指定文件名命名的新文件,并執(zhí)行寫入操作。

示例:

    #!/bin/bash


    writefile=WriteFile.txt


    $ echo "編程獅:hgci.cn" > $writefile


    $ echo "編程獅:hgci.cn" >> $writefile


    #使用 cat 命令打印文件內(nèi)容
    cat $writefile

執(zhí)行后得到以下結(jié)果:

    編程獅:hgci.cn
    編程獅:hgci.cn

輸入重定向

與輸出重定向一樣,但是符號方向相反。語法展示如下:

command < file

接下來使用 wc命令讀取文件行數(shù)配合演示示例。 示例:

$ wc -l < WriteFile.txt

注:
- 此處不會輸出文件名, <僅知道從“標(biāo)準(zhǔn)輸入”讀取的內(nèi)容。

深入理解

  1. 您需要理解以下三個文件概念:
    • stdin:標(biāo)準(zhǔn)輸入文件,其文件描述符為0,默認(rèn)由此讀取數(shù)據(jù)。
    • stdout:標(biāo)準(zhǔn)輸出文件,其文件描述符為1,默認(rèn)向它輸出數(shù)據(jù)。
    • stderr:標(biāo)準(zhǔn)錯誤文件,其文件描述符為2,默認(rèn)向它寫入錯誤信息。

    #默認(rèn)情況下
    command > file
    #將 stdout 重定向到 file


    command < file
    #將 stdin 重定向到 file

  1. 如果想要 stderr重定向到 file ,如下示例:

    $ command 'stderr' > file
    #或(注意二者的區(qū)別)
    $ command 'stderr' >> file

注:
- 'stderr'指代標(biāo)準(zhǔn)錯誤文件,非命令,請不要盲目復(fù)制使用。

  1. 如果希望對stdinstdout都進行重定向,將 file1 作為command 的輸入,并將 command 的處理結(jié)果輸出到 flie2 。

    command < file1 > file2
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號