Ejecutar y guardar registro

Ejecutar y guardar registro

Estoy ejecutando un script en los Argumentos mediante un bucle y guardando registros en un archivo. Cómo utilizar el comando Args para ejecutarlo todo a la vez. A continuación se probaron argumentos -n -500

Pero esto no guarda registros. ¿Cómo agregar para guardar registros aquí?

Respuesta1

Creo que solo necesitasgrupolos comandos del bucle interno y redirigen su salida a un archivo indexado por el mismo índice $i, luego empujan todos juntos en segundo plano &. Algo como

for i in $(cat $file_name)
do
    (echo "$i"; /path/script.pl "$i") >> "${file_save}-${i}" &
done

También en lugar fory caten este caso usaría whiley readde alguna manera así:

#!/bin/bash

file_name='in_file'

while IFS= read -r i
do
        (echo "$i"; /path/script.pl "$i") >> "${file_save}-${i}" 2>&1 &
done < "$file_name"

Aquí 2>&1se agrega en caso de que desee tener los mensajes de error en su archivo de registro. Más información sobre la construcción IFS= read -r linese puede encontrar en esterespuesta enciclopédicaproporcionado por @StéphaneChazelas.

Además, si la ejecución ./script.pllleva mucho tiempo, puede desconectarse del shell actual en caso de que cierre accidentalmente la ventana del terminal donde se inició el script principal. Para ello puedes utilizarnohup mycommand &en lugar de eso solo &.


De acuerdo con el escenario anterior, probablemente la forma más fácil de fusionar todos los registros en un archivo es usar un bucle nuevamente (una vez que finalicen todos los trabajos del script principal) de esta manera:

#!/bin/bash

file_name='in_file'
merged_log='out_file'

>"$merged_log"   # empty the merged log file - not mandatory if the file doesn't exist

while IFS= read -r i
do
        cat "${file_save}-${i}" >> "$merged_log"
        rm "${file_save}-${i}"
done < "$file_name"

Esto también debería funcionar:

#!/bin/bash

file_name='in_file'
merged_log='out_file'

while IFS= read -r i
do
        cat "${file_save}-${i}"
        rm "${file_save}-${i}"
done < "$file_name" > "$merged_log"

Respuesta2

Si el orden de escritura no importa,

for i in $(cat $file_name);do echo $i; ./script.pl $i>>file & done

Esto es paralelo.

información relacionada