Take the 2-minute tour ×
Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

You know when you do something like apt-cache search something | less? Well (in a Bash script) how do you get the input and set it to a variable (like less is doing, but less isn't a Bash script)?

share|improve this question
    
So you want to define a variable containing the output of a command in a Bash script? –  cYrus Aug 24 '10 at 19:59
add comment

2 Answers

up vote 1 down vote accepted

If you want to do something like what less is doing (receive input on its standard input, process it, then output it) in a script that you write, you can use a while read loop in your script.

#!/bin/bash
echo "Beginning"
while read -r line
do
    echo "Processed: [$line]"
done
echo "Ending"

Then you can run it like this:

some_command | your_script

and your output will look like this:

Beginning
Processed: [First line of input]
Processed: [Second line of input]
Processed: [Third line of input]
Processed: [Fourth line of input]
Ending

Assuming that some_command by itself outputs:

First line of input
Second line of input
Third line of input
Fourth line of input

The variable $line is being assigned the value of each line of input in turn. You could accumulate those lines if you needed to by concatenating each line onto a scalar variable:

all=$all$line

or

all+=$line

or by appending elements on the end of an array:

array+=($line)
share|improve this answer
add comment

You are misunderstanding command | less. In that scenario, the less command doesn't cause the connection; the pipe connects the previous command to less. Also, you're saying 'input' where I think you mean 'output'. What you type into the terminal is the input in this case; the output is whatever command spits back out. less receives the output of the command via | (aka, the pipe). The pipe takes the standard output of one command and plugs it in as the standard input of another. (You might find this Wikipedia article helpful as a start.)

To assign the output of one command to a variable, you would normally do something like this:

variable=$(command)
# older syntax for above
variable=`command`

But I very much doubt you really want to assign the output of apt-cache search foo to a variable.

Can you elaborate a bit on your larger goal? What are you really trying to do?

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.