from - script bash read
leer stdin en funciĆ³n en script bash (3)
Llame a sed
directamente. Eso es.
function filter-general {
sed <bla-blah-blah>
}
Tengo un conjunto de funciones de bash que generan información:
- find-modelname-in-epson-ppds
- find-modelname-in-samsung-ppds
- find-modelname-in-hp-ppds
- etc ...
He estado escribiendo funciones que leen la salida y la filtran:
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 ...
Pero pensé que sería mejor hacer algo como esto:
function filter-general {
(somehow get input) | sed <bla-blah-blah>
}
y luego llama a otras funciones de alto nivel:
function high-level-func {
# outputs filtered information
find-modelname-in-hp/epson/...-ppds | filter-general
}
¿Cómo puedo lograr eso con las mejores prácticas de bash?
Para ser dolorosamente explícito de que estoy saliendo de stdin, a veces escribo
cat - | ...
Si la pregunta es How do I pass stdin to a bash function?
, entonces la respuesta es:
Las funciones de Shellscript toman stdin de manera ordinaria, como si fueran comandos o programas. :)
input.txt:
HELLO WORLD
HELLO BOB
NO MATCH
test.sh:
#!/bin/sh
myfunction() {
grep HELLO
}
cat input.txt | myfunction
Salida:
hobbes@metalbaby:~/scratch$ ./test.sh
HELLO WORLD
HELLO BOB
Tenga en cuenta que los argumentos de línea de comandos TAMBIÉN se manejan de la manera ordinaria, como esta:
test2.sh:
#!/bin/sh
myfunction() {
grep "$1"
}
cat input.txt | myfunction BOB
Salida:
hobbes@metalbaby:~/scratch/$ ./test2.sh
HELLO BOB