J'ai un ensemble de fonctions bash qui produisent des informations:
J'ai écrit des fonctions qui lisent la sortie et la filtrent:
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 ...
Mais je pensais qu'il valait mieux faire quelque chose comme ça:
function filter-general {
(somehow get input) | sed <bla-blah-blah>
}
puis appelez une autre fonction de haut niveau:
function high-level-func {
# outputs filtered information
find-modelname-in-hp/epson/...-ppds | filter-general
}
Comment puis-je y parvenir avec les meilleures pratiques bash?
Si la question est How do I pass stdin to a bash function?
, alors la réponse est:
Les fonctions Shellscript prennent stdin de la manière ordinaire, comme s'il s'agissait de commandes ou de programmes. :)
input.txt:
HELLO WORLD
HELLO BOB
NO MATCH
test.sh:
#!/bin/sh
myfunction() {
grep HELLO
}
cat input.txt | myfunction
Production:
hobbes@metalbaby:~/scratch$ ./test.sh
HELLO WORLD
HELLO BOB
Notez que les arguments de ligne de commande sont également traités de la manière habituelle, comme ceci:
test2.sh:
#!/bin/sh
myfunction() {
grep "$1"
}
cat input.txt | myfunction BOB
Production:
hobbes@metalbaby:~/scratch/$ ./test2.sh
HELLO BOB
Pour être douloureusement explicite sur le fait que je siffle depuis stdin, j'écris parfois
cat - | ...
Appelez sed
directement. C'est ça.
function filter-general {
sed <bla-blah-blah>
}