Bash 重定向

2020-06-19 13:56 更新

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

輸出重定向

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

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

示例:

    #!/bin/bash


    writefile=WriteFile.txt


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


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

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

    編程獅:m.hgci.cn

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

示例:

    #!/bin/bash


    writefile=WriteFile.txt


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


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


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

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

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

輸入重定向

與輸出重定向一樣,但是符號(hào)方向相反。語(yǔ)法展示如下:

command < file

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

$ wc -l < WriteFile.txt

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

深入理解

  1. 您需要理解以下三個(gè)文件概念:
    • 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)錯(cuò)誤文件,其文件描述符為2,默認(rèn)向它寫(xiě)入錯(cuò)誤信息。

    #默認(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)錯(cuò)誤文件,非命令,請(qǐng)不要盲目復(fù)制使用。

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)