2011-07-29 13 views
9

Estoy intentando ejecutar un comando para cada línea proveniente de un comando cat. Estoy basando esto en el código de muestra que obtuve de un proveedor.Imprime la salida de la instrucción cat en el script bash loop

Aquí está la secuencia de comandos:

for tbl in 'cat /tmp/tables' 
do 
    echo $tbl 
done 

así que esperaba que la salida sea cada línea en el archivo. En cambio estoy obteniendo esto:

cat 
/tmp/tables 

Eso obviamente no es lo que quería.

Voy a reemplazar el eco con un comando real que interactúa con una base de datos.

Cualquier ayuda para enderezar esto sería muy apreciada.

Respuesta

14

Está utilizando un tipo incorrecto de comillas.

Necesita utilizar las comillas entre comillas en lugar de la comilla simple para que el argumento sea un programa en ejecución y extraiga el contenido para forloop.

for tbl in `cat /tmp/tables` 
do 
    echo "$tbl" 
done 

También para facilitar la lectura (si está utilizando bash), se puede escribir como

for tbl in $(cat /tmp/tables) 
do 
    echo "$tbl" 
done 

Si sus expectativas son conseguir que cada línea (El para-bucles anterior le dará cada palabra), entonces usted puede ser mejor usar xargs, como este

cat /tmp/tables | xargs -L1 echo 

o como un bucle

cat /tmp/tables | while read line; do echo "$line"; done 
+1

sabía que era algo estúpido como esto. Gracias. – geoffrobinson

2

Las comillas simples deben ser invertidas:

for tbl in `cat /etc/tables` 

Aunque, esto no le dará salida/entrada por línea, pero por palabra. Para procesar línea por línea, usted debe intentar algo como:

cat /etc/tables | while read line 
    echo $line 
done 
3

Con mientras bucle:

while read line 
do 
echo "$line" 
done < "file" 
2
while IFS= read -r tbl; do echo "$tbl" ; done < /etc/tables 

leer this.

0

Usted puede hacer un montón de análisis en bash mediante la redefinición de la IFS (Campo de entrada Separador), por ejemplo

IFS='\t\n' 
for tbl in `cat /tmp/tables` 
do 
    echo "$tbl" 
done 
+0

'\ t \ n'? ¿Lo has probado en bash? Se dividirá en '\', 't', 'n', inútil. – kubanczyk

Cuestiones relacionadas