Shell-Script
tee
用於命令
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
,您可以通過告訴它同時執行xsel
並cat
使用輸入來獲得所需的結果。echo foo | pee xsel cat
那裡有一個額外的
cat
過程來執行輸出,這對您的案例來說並不是真正的問題,但在其他時候可能不太理想。與程序替換不同,這適用於任何 shell,但它當然需要安裝額外的(可能不太常見)工具。您可以通過引用它們來給出更複雜的命令:
pee "xsel --display :1" cat
. 它們與 一起執行sh
,因此您必須小心 shell 元字元。