2012-07-10 53 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