[英]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
做:
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 /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.