2010-03-04 8 views
11

estoy tratando de hacer algo comoLectura de varias líneas en bash sin generar una nueva subshell?

var=0 
grep "foo" bar | while read line; do 
    var=1 
done 

Desafortunadamente esto no funciona ya que la tubería hace que el tiempo para ejecutar en un subnivel. ¿Hay una mejor manera de hacer esto? No necesito usar "leer" si hay otra solución.

He visto Bash variable scope, que es similar, pero no pude obtener nada que funcionara con él.

+0

Esta es http://mywiki.wooledge.org/BashFAQ/024 – tripleee

Respuesta

17

Si realmente está haciendo algo tan simplista, ni siquiera necesita el bucle while read. El siguiente funcionaría:

VAR=0 
grep "foo" bar && VAR=1 
# ... 

Si usted realmente no necesita el bucle, porque otras cosas están sucediendo en el bucle, puede redirigir a un cambio <(commands) proceso:

VAR=0 
while read line ; do 
    VAR=1 
    # do other stuff 
done < <(grep "foo" bar) 
+2

(lista)? ¿No se llama sustitución de proceso? http://tldp.org/LDP/abs/html/process-sub.html – pihentagy

2

no utilice pipa, y perder el grep

var=1 
while read line 
do 
    case "$line" in 
    *foo*) var=1 
    esac 
done <"file" 
echo "var after: $var" 
Cuestiones relacionadas