簡體   English   中英

帶重定向的 tee bash 命令

[英]tee bash command with redirection

我有以下文件:

文件1.txt

geek
for
geeks

我正在使用tee命令對輸出執行兩個操作。 我的問題是關於第一個tee之后的重定向字符。 我想獲取file1.txt的第一列並將其寫入file2.txt。 當我運行以下命令時,我沒有收到錯誤,但它沒有給我第一列:

wc -l file1.txt |tee awk '{print $1}' - > file2.txt | sed 's/4/6/g' > file3.txt

但是,以下命令按預期工作。 >在這里做什么?

wc -l file1.txt |tee >(awk '{print $1}' - > file2.txt) | sed 's/4/6/g' > file3.txt
tee awk '{print $1}' - > file2.txt

做:

  • 使用 3 個參數awk'{print $1}'-執行tee
  • tee創建一個名為awk的文件另一個名為'{print $1}'文件和另一個名為-文件。
  • 然后tee的輸出將被重定向到file2.txt
  • tee將復制輸入到這 3 個文件並輸出到file2.txt
  • 因此| sed | sed將不會收到任何輸入,因為tee的輸出被重定向到文件並且子 shell 不輸出任何內容。

 tee >(awk '{print $1}' - > file2.txt)

做:

  • >(...)
    • 使用兩個參數'{print $1}'-運行awk
    • ------ '{print $1}'被解釋為腳本
    • ------ -被解釋為標准輸入(並且可以省略)
    • ------ 然后將awk的輸出重定向到file2.txt
    • 然后bash創建一個 fifo 或一個/dev/fd/something文件
    • 然后該文件的輸出連接到awk進程的標准輸入
    • 並且>(awk ...)替換為文件的文件名,很可能替換/dev/fd/something
  • tee >(...)
    • 用一個參數執行 tee,比如tee /dev/fd/something
    • /dev/fd/something連接到另一端的 awk 進程
    • 所以tee寫入/dev/fd/something並且awk從另一端的 stdin 讀取數據
    • tee的輸出被重定向到| sed | sed

> 在這里做什么?

第一次出現用於引入進程替換。 第二次出現用於將awk命令的輸出重定向到名為file2.txt的文件。 第三次出現用於將sed命令的輸出重定向到名為file3.txt文件。

在這里,進程替換用於捕獲通常會轉到文件的輸出

寫入進程的 Bash 語法是>(command)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM