いくつかの情報を出力するbash関数のセットがあります。
私は出力を読み取り、それをフィルタリングする関数を書いてきました:
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
}
Bashのベストプラクティスを使用してそれを実現するにはどうすればよいですか?
質問がHow do I pass stdin to a bash function?
、それから答えは:
シェルスクリプト関数は、コマンドまたはプログラムであるかのように、通常の方法で標準入力を取ります。 :)
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
私が標準入力からパイプしていることを痛々しいほど明確にするために、私は時々書く
cat - | ...
sed
を直接呼び出します。それでおしまい。
function filter-general {
sed <bla-blah-blah>
}