Выполнить и сохранить журнал

Загрузите UbuntuTweak, перейдите в Настройки диспетчера окон и нажмите «Вправо»

Изменить: я не совсем уверен, что это делает это для всех пользователей, но это легко.

1
задан 24 June 2019 в 07:28

2 ответа

Я думаю, что просто необходимо сгруппировать команды внутреннего цикла и перенаправить их вывод в файл, индексированный тем же индексом $i, затем продвиньте все вместе в фоновом режиме &. Что-то как

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

Также вместо этого for и cat в этом случае я использовал бы while и read в некотором роде как это:

#!/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"

Здесь 2>&1 добавляется в случае, если Вы хотите иметь и сообщения об ошибках в Вашем файле журнала. Больше о конструкции IFS= read -r line мог быть найден в этом энциклопедическом ответе, предоставленном @StéphaneChazelas.

Кроме того, если выполнение ./script.pl действительно занимает много времени можно отсоединиться от текущей оболочки в случае, если Вы случайно закрываете окно терминала, где основной сценарий был запущен. С этой целью можно использовать nohup mycommand & вместо этого просто &.


Согласно вышеупомянутому сценарию, вероятно, самый легкий способ объединиться все входит в систему, один файл должен использовать цикл снова (однажды все задания от основного конца сценария) таким способом:

#!/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"

Это также должно работать:

#!/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"
0
ответ дан 7 December 2019 в 19:48

Если порядок записи не имеет значения,

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

Это параллельно.

0
ответ дан 7 December 2019 в 19:48

Другие вопросы по тегам:

Похожие вопросы: