Podría hacer esto en cualquier otro idioma, pero con Bash he buscado mucho y no he podido encontrar la respuesta.iterar manualmente una línea de un archivo | bash
Necesito manualmente aumentar $line
en un script. Ejemplo:
for line in `cat file`
do
foo()
foo_loop(condition)
{
do_something_to_line($line)
}
done
Si se fijan, cada vez que el foo_loop
itera, $line
sigue siendo el mismo. Necesito iterar $line
allí, y me aseguro de que el bucle original for solo ejecuta el número de líneas en el archivo.
He pensado en encontrar el número de líneas en el archivo utilizando un ciclo diferente e iterando la variable de línea dentro del ciclo interno de foo()
.
¿Alguna idea?
EDIT:
Lo siento por ser tan vago.
Aquí vamos:
que estoy tratando de hacer una sección de mi código de ejecutar varias veces (ejecución paralela)
Function foo() # Does something
for line in `cat $temp_file`;
foo($line)
Ese código funciona bien, porque foo
simplemente se está llevando en el valor de línea; pero si lo que quería hacer esto:
Function foo() # Does something
for line in `cat $temp_file`;
while (some condition)
foo($line)
end
$line
será igual al mismo valor en todo el bucle while. Necesito que cambie con el ciclo while
, luego continúo cuando vuelva al for
. Ejemplo:
line = Hi
foo{ echo "$line" };
for line in `cat file`;
while (number_of_processes_running -lt max_number_allowed)
foo($line)
end
Si el contenido del archivo eran
Hi \n Bye \n Yellow \n Green \n
La salida del programa de ejemplo sería (si el número máximo permitido fue 3)
Hi Hi Hi Bye Bye Bye Yellow Yellow Yellow Green Green Green.
donde quiero que a ser
Hi Bye Yellow Green
Espero esta es mejor. Estoy haciendo mi mejor esfuerzo para explicar mi problema.
Creo que necesitamos un ejemplo más claro de lo que estás tratando de lograr. foo() parece definir una función de shell dentro de un bucle, de lo que no estoy seguro es lo que quieres. –