I have some set of bash functions which output some information:
I've been writing functions which read output and filter it:
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 ...
But the I thought that it would be better do something like this:
function filter-general { (somehow get input) | sed <bla-blah-blah> }
and then call in another high-level functions:
function high-level-func { # outputs filtered information find-modelname-in-hp/epson/...-ppds | filter-general }
How can I achieve that with the best bash practices?
It appends the output at the end of the target file. The goal of stdin is to work with input. This can also be redirected. For example, instead of typing the input from the keyboard, it can be loaded from a file.
stdin − It stands for standard input, and is used for taking text as an input. stdout − It stands for standard output, and is used to text output of any command you type in the terminal, and then that output is stored in the stdout stream. stderr − It stands for standard error.
Example of command substitution using $() in Linux: Again, $() is a command substitution which means that it “reassigns the output of a command or even multiple commands; it literally plugs the command output into another context” (Source).
Bash read SyntaxThe read command takes the user input and splits the string into fields, assigning each new word to an argument. If there are fewer variables than words, read stores the remaining terms into the final variable. Specifying the argument names is optional.
If the question is How do I pass stdin to a bash function?
, then the answer is:
Shellscript functions take stdin the ordinary way, as if they were commands or programs. :)
input.txt:
HELLO WORLD HELLO BOB NO MATCH
test.sh:
#!/bin/sh myfunction() { grep HELLO } cat input.txt | myfunction
Output:
hobbes@metalbaby:~/scratch$ ./test.sh HELLO WORLD HELLO BOB
Note that command line arguments are ALSO handled in the ordinary way, like this:
test2.sh:
#!/bin/sh myfunction() { grep "$1" } cat input.txt | myfunction BOB
Output:
hobbes@metalbaby:~/scratch/$ ./test2.sh HELLO BOB
To be painfully explicit that I'm piping from stdin, I sometimes write
cat - | ...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With