我想要執行一個命令,讓該命令的輸出在運行中得到gzip,並且回顯/輸出該命令的輸出。如何將gzip標準加入到文件中,並將標準打印到標準中?
即是這樣的:
echo "hey hey, we're the monkees" | gzip --stdout > my_log.gz
除行執行的時候,我希望看到這個標準出來:
hey hey, we're the monkees
我想要執行一個命令,讓該命令的輸出在運行中得到gzip,並且回顯/輸出該命令的輸出。如何將gzip標準加入到文件中,並將標準打印到標準中?
即是這樣的:
echo "hey hey, we're the monkees" | gzip --stdout > my_log.gz
除行執行的時候,我希望看到這個標準出來:
hey hey, we're the monkees
echo "hey hey, we're the monkees" | tee /dev/tty | gzip --stdout > my_log.gz
正如在評論中指出,/dev/stdout
威力在某些情況下比/dev/tty
工作更好。
祝你有個不錯的杯子tee!
tee命令拷貝標準輸入 到標準輸出並且也作爲參數給出任何 文件。這是 有用的,當你想不只是送 某些數據中,一個管道,還要 保存副本
正如我有一個緩慢的下午,這裏的有些誇張說明ASCII藝術...
+-----+ +---+ +-----+
stdin -> |cmd 1| -> stdout -> |tee| -> stdout -> |cmd 2|
+-----+ +---+ +-----+
|
v
file
由於greyfade在另一個答案體現了「文件」不一定是一個普通的文件,但可能是FIFO讓你管那個tee'd輸出到第三命令。
+-----+ +---+ +-----+
stdin -> |cmd 1| -> stdout -> |tee| -> stdout -> |cmd 2|
+-----+ +---+ +-----+
|
v
FIFO
|
v
+-----+
|cmd 3|
+-----+
另一種方法(假設像bash
或zsh
殼):
echo "hey hey, we're the monkees" | tee >(gzip --stdout > my_log.gz)
誠然奇怪>()
語法基本上具有下列功能:
/tmp/
)()
和b中執行命令將FIFO指定給該子命令上的stdin什麼tee
最終看到的話,是這樣的:
tee /tmp/arjhaiX4
所有gzip
看到的是它的標準輸入。
對於Bash,詳見man bash
。它在redirection的部分。對於Zsh,請參閱man zshexpn
,標題爲「過程替代」。據我所知,Korn Shell,經典的Bourne Shell(包括灰和破折號)和C Shell的變體不支持這種語法。
剛剛發佈的方式,不涉及接觸磁盤:
echo "hey hey, we're the monkees" | (exec 1>&3 && tee /proc/self/fd/3 | gzip --stdout > my_log.gz)
_A_w_e_s_o_m_e_。謝謝。 – 2009-02-20 19:54:29
在那裏做什麼/ dev/tty?原始問題需要標準輸出的輸出,而不是終端上的輸出。 – 2009-02-20 20:29:46
/dev/tty是當前終端的同義詞。提問者以習慣的方式使用「標準輸出」來表示當前的終端,而不是對該術語的更嚴格的定義。 – 2009-02-20 20:41:57