在bash脚本函数读取标准输入(read stdin in function in bash scr

2019-07-17 12:45发布

我有一些组的bash功能,这输出一些信息:

  • 发现-MODELNAME功能于爱普生PPDS
  • 发现-MODELNAME功能于三星PPDS
  • 发现-MODELNAME式-HP-PPDS
  • 等等...

我一直在写这读取输出并将其过滤功能:

function filter-epson {
    find-modelname-in-epson-ppds | sed <bla-blah-blah>
}

function filter-hp {
    find-modelname-in-hp-ppds | sed <the same bla-blah-blah>
}
etc ...

但我认为,这将是更好的做这样的事情:

function filter-general {
    (somehow get input) | sed <bla-blah-blah>
}

然后在另一个高级功能拨打:

function high-level-func {
    # outputs filtered information
    find-modelname-in-hp/epson/...-ppds | filter-general 
}

我怎样才能做到这一点最好的庆典做法?

Answer 1:

如果问题是How do I pass stdin to a bash function? ,那么答案是:

shell脚本函数接受标准输入普通的方式,好像他们是命令或程序。 :)

input.txt中:

HELLO WORLD
HELLO BOB
NO MATCH

test.sh:

#!/bin/sh

myfunction() {
    grep HELLO
}

cat input.txt | myfunction

输出:

hobbes@metalbaby:~/scratch$ ./test.sh 
 HELLO WORLD 
 HELLO BOB 

需要注意的是命令行参数在普通顺便也处理,就像这样:

test2.sh:

#!/bin/sh

myfunction() {
    grep "$1"
}

cat input.txt | myfunction BOB

输出:

hobbes@metalbaby:~/scratch/$ ./test2.sh 
 HELLO BOB 


Answer 2:

要明确的痛苦,我是从标准输入管道,我有时会写

cat - | ...


Answer 3:

打电话sed直接。 而已。

function filter-general {
    sed <bla-blah-blah>
}


文章来源: read stdin in function in bash script