2011-03-08 66 views
1

我想統計bash腳本中命令輸出的行數。即bash輸出重定向概率

COUNT=ls | wc -l

但我也希望腳本輸出ls原始輸出。如何完成這項工作? (我的實際命令不是ls,它有副作用,所以我不能跑兩次。)

回答

4

tee(1)實用程序可能會有所幫助:

$ ls | tee /dev/tty | wc -l 
CHANGES 
qpi.doc 
qpi.lib 
qpi.s 
4 

info coreutils "tee invocation"包括下面的例子中,這可能是更有益的tee(1)的力量:

wget -O - http://example.com/dvd.iso \ 
    | tee >(sha1sum > dvd.sha1) \ 
     >(md5sum > dvd.md5) \ 
    > dvd.iso 

那下載文件後,通過兩個子進程發送輸出(如啓動通過bash(1)進程替換)以及tee(1)的stdout,它被重定向到一個文件。

+2

這裏有一個變量,把行數放在一個變量中,而不是添加到輸出中:'COUNT = $(ls -l | tee/dev/tty | wc -l)' – 2011-03-08 07:04:04

+0

@Gordon Davisson,謝謝,那會對@nakiya想要的更有用。 :) – sarnold 2011-03-08 07:08:04

+0

從技術上講,這是Bash的流程替代。 – 2011-03-08 11:48:40

2
ls | tee tmpfile | first command 
cat tmpfile | second command 
+0

它的工作原理!謝謝。 – nakiya 2011-03-08 06:51:39

0

T恤是做一個好辦法,但你可以做簡單的東西:

ls > __tmpfile 

cat __tmpfile | wc -l 
cat __tmpfile 

rm __tmpfile