首頁 > 軟體

管道及I/O重定向

2020-06-16 16:49:59

管道符"|"

管道符"|":前一個命令的輸出,作為後一個命令的輸入

命令1 | 命令2 | 命令3 | ...

# 輸出"hello,world."並將小寫轉換為大寫
[root@localhost ~]# echo "hello,world." | tr 'a-z' 'A-Z'
HELLO,WORLD.

# 顯示passwd檔案中按:分割的每行第一個部分並排序並將小寫轉換為大寫
[root@localhost ~]# cut -d: -f1 /etc/passwd | sort | tr 'a-z' 'A-Z'
ADM
APACHE
BIN
DAEMON
DBUS
Fedora

I/O重定向

簡單的解釋就是捕捉一個檔案, 命令, 程式, 指令碼, 或者甚至是指令碼中的程式碼塊的輸出, 然後將這些輸出作為輸入傳送到另一個檔案, 命令, 程式, 或指令碼中。

標準輸入輸出

執行一個shell命令列時通常會自動開啟三個標準檔案,即標準輸入檔案(stdin),通常對應終端的鍵盤;標準輸出檔案(stdout)和標準錯誤輸出檔案(stderr),這兩個檔案都對應終端的螢幕。
進程將從標準輸入檔案中得到輸入資料,將正常輸出資料輸出到標準輸出檔案,而將錯誤資訊送到標準錯誤檔案中。
習慣上,標準輸入(standard input)的檔案描述符是 0,標準輸出(standard output)是 1,標準錯誤(standard error)是 2。

I/O重定向符號

  • cmd 1 | cmd 2 把 stdout 重定向到 cmd 2 的 shdin;
  • cmd > file 把 stdout 或者 stderr 重定向到 file 檔案中;
  • cmd >> file 把 stdout 或者 stderr 重定向到 file 檔案中(追加);
  • cmd > file 2>&1 把 stdout 和 stderr 一起重定向到 file 檔案中;
  • cmd >> file 2>&1 把 stdout 和 stderr 一起重定向到 file 檔案中(追加);
  • cmd < file >file2 cmd 命令以 file 檔案作為 stdin,以 file2 檔案作為 stdout;
  • cat <>file 以讀寫的方式開啟 file;
  • cmd < file cmd 命令以 file 檔案作為 stdin;
  • cmd << delimiter Here document,從 stdin 中讀入,直至遇到 delimiter 分界符;
  • cmd 1 | cmd 2 > file 把多個 stdout 重定向到 file 檔案中。

其中2>&1中的數位代表重定向檔案描述符,表示重定向 stderr 到 stdout 。

關閉檔案描述符

n<&-
#關閉輸入檔案描述符n.

0<&-
<&-
#關閉stdin.

n>&-
#關閉輸出檔案描述符n.

1>&-
>&-
#關閉stdout.

set

set -C:禁止對已經存在檔案使用覆蓋重定向:
    強制覆蓋輸出,則使用 >|
set +C:關閉上述功能

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新連結地址https://www.linuxidc.com/Linux/2018-07/153193.htm


IT145.com E-mail:sddin#qq.com