Reputation: 16007
I can't for the life of me see why I can not read the postPrioity outside the while loop. I tried "export postPrioity="500"" still didn't work.
Any ideas?
-- or in plan text --
#!/bin/bash
cat "/files.txt" | while read namesInFile; do
postPrioity="500"
#This one shows the "$postPrioity" varible, as '500'
echo "weeeeeeeeee ---> $postPrioity <--- 1"
done
#This one comes up with "" as the $postPrioity varible. GRRR
echo "weeeeeeeeee ---> $postPrioity <--- 2"
OUTPUT: (I only have 3 file names in files.txt)
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> 500 <--- 1
weeeeeeeeee ---> <--- 2
Upvotes: 1
Views: 4222
Reputation: 44414
Alternatively use process substitution:
while read line
do
variable=value
done < <(command)
Upvotes: 1
Reputation: 15582
As a complement to Philipp's response, in case you MUST use a pipe (and as he pointed out, in your example you don't need cat), you can put all the logic in the same side of the pipe:
command | {
while read line; do
variable=value
done
# Here $variable exists
echo $variable
}
# Here it doesn't
Upvotes: 7
Reputation: 49850
The pipe operator creates a subshell, see BashPitfalls and BashFAQ. Solution: Don't use cat
, it's useless anyway.
#!/bin/bash
postPriority=0
while read namesInFile
do
postPrioity=500
echo "weeeeeeeeee ---> $postPrioity <--- 1"
done < /files.txt
echo "weeeeeeeeee ---> $postPrioity <--- 2"
Upvotes: 9