2012-07-10 40 views
1

我打算執行這個辦法:擊風格來接收輸入從管

./some_code | ./my_bash.sh 

什麼是./my_bash.sh語法,以便它可以採取 輸入其他的管道?

我試過這個,但不會工作。

#!/bin/bash 

# this is ./my_bash.sh 
cut -f1 [email protected] | grep 'foo' | wc -l 
# [email protected] failed 
+1

除'@ $'部分之外,您擁有的代碼應該可以工作。但是,你可以把它寫成'cut -f1 | grep -c'foo'',甚至只是'grep -c $'^ [^ \ t] * foo [^ \ t] *'' – kojiro 2012-07-10 00:10:42

+0

請參閱[從STDIN管道讀取值](http:// stackoverflow。 com/questions/2746553/bash-script-read-values-from-stdin-pipe) – jmdeldin 2012-07-10 00:12:24

+0

@kojiro:你應該將它作爲答案發布,因爲它是一個值得讚揚和信任的答案。 – 2012-07-10 00:13:16

回答

1

目前尚不清楚你想要什麼參數([email protected])。也許只是刪除那部分。除此之外,你的代碼應該工作。但是,您可以將它寫爲cut -f1 | grep -c 'foo',甚至只是grep -c $'^[^\t]*foo[^\t]*'

+0

解釋:基本上,'cut'默認從標準輸入讀取。在你的pipe-target腳本中,'cut'的標準輸入是腳本的標準輸入,而腳本又是來自管道的,所以這應該起作用。 – 2012-07-10 00:18:18

+0

如果您希望腳本能夠爲'cut'採用參數並將它們作爲附加功能傳遞,您可以這樣寫: 'cut -f1「$ @」| grep'foo'| wc -l'。圍繞'$ @'的引號是神奇的,在這個具體的用法中,他們所做的就是告訴bash將你得到的參數傳遞給它,而不用重新分割空格或其他重新解釋。 – 2012-07-10 00:20:08