Bash 重定向

2020-06-19 13:56 更新

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

輸出重定向

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

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

示例:

  1. #!/bin/bash
  2. writefile=WriteFile.txt
  3. $ echo "編程獅:www.o2fo.com" > $writefile
  4. #使用 cat 命令打印文件內(nèi)容
  5. $ cat $writefile

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

  1. 編程獅:www.o2fo.com

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

示例:

  1. #!/bin/bash
  2. writefile=WriteFile.txt
  3. $ echo "編程獅:www.o2fo.com" > $writefile
  4. $ echo "編程獅:www.o2fo.com" >> $writefile
  5. #使用 cat 命令打印文件內(nèi)容
  6. cat $writefile

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

  1. 編程獅:www.o2fo.com
  2. 編程獅:www.o2fo.com

輸入重定向

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

  1. command < file

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

  1. $ 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)向它寫入錯(cuò)誤信息。

  1. #默認(rèn)情況下
  2. command > file
  3. #將 stdout 重定向到 file
  4. command < file
  5. #將 stdin 重定向到 file

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

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

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

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

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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號