Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

read stdin in function in bash script

I have some set of bash functions which output some information:

  • find-modelname-in-epson-ppds
  • find-modelname-in-samsung-ppds
  • find-modelname-in-hp-ppds
  • etc ...

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?

like image 835
likern Avatar asked Dec 22 '12 17:12

likern


People also ask

How does stdin work in bash?

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.

What is stdin in shell script?

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.

What does $() mean in bash?

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).

What is read in bash script?

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.


2 Answers

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  
like image 153
daveloyall Avatar answered Oct 04 '22 07:10

daveloyall


To be painfully explicit that I'm piping from stdin, I sometimes write

cat - | ... 
like image 23
glenn jackman Avatar answered Oct 04 '22 09:10

glenn jackman