Shell-Script

tee 用於命令

  • June 17, 2017

tee可以將管道標準輸入重定向到標準輸出文件。

echo Hello, World! | tee greeting.txt

上面的命令將在終端螢幕上顯示問候語並將其保存在文件的內容中greeting.txt,如果沒有該名稱的文件,則創建該文件。

還有用於附加到現有文件而不是覆蓋的-a開關。tee


有沒有一種方便的方法可以將管道輸入重定向到命令和標準輸出而不是文件?

我正在嘗試創建一個包裝腳本,buku以便將由其索引號指定的書籤的 URL 複製到主要選擇。

# bukuc:
#!/bin/sh
url=$(buku -f 1 -p $1 | cut -f 2) # NUMBER : URL
echo $url # DISPLAY
echo $url | xsel # PRIMARY SELECTION

這裡我使用echo 了兩次,第一次在終端上顯示,然後保存在主選擇(剪貼板)中。

我想像echo $url | teeC xsel在傳遞給下一個命令(連結命令)之前顯示輸出的一些東西或快捷方式,這將允許我將整個命令連結在一行中,而無需將結果保存在變數中,如下所示:

buku -f 1 -p $1 | cut -f 2 | teeC xsel    

我還可以使用它urlview來查看、選擇和打開,$BROWSER如下所示:

bukuc 10-20 | urlview

它在支持程序替換的 shell 中很簡單,例如 bash

$ echo foo | tee >(xsel)
foo
$ xsel -o
foo

否則,您可以使用 FIFO(儘管它缺乏便利性)

$ mkfifo _myfifo
$ xsel < _myfifo &
$ echo bar | tee _myfifo
bar
$ xsel -o
bar
[1] + Done                       xsel 0<_myfifo
$ 

“tee for commands”的直接類似物是pee來自 moreutils ( tee,但帶有管道) 的命令。它的參數被用作執行命令,而不是路徑,它們將輸入通過管道傳輸給它們,而不是寫入文件。所有命令都被賦予了您pee作為它們自己的管道輸入的標準輸入。

使用pee,您可以通過告訴它同時執行xselcat使用輸入來獲得所需的結果。

echo foo | pee xsel cat

那裡有一個額外的cat過程來執行輸出,這對您的案例來說並不是真正的問題,但在其他時候可能不太理想。與程序替換不同,這適用於任何 shell,但它當然需要安裝額外的(可能不太常見)工具。

您可以通過引用它們來給出更複雜的命令:pee "xsel --display :1" cat. 它們與 一起執行sh,因此您必須小心 shell 元字元。

引用自:https://unix.stackexchange.com/questions/371699