У меня есть две функции в моих сценариях оболочки, которые я выполняю в фоне:
function foo {
# do a bunch of things
# print a lot of output
}
function bar {
# do more things
# print out more things
}
foo &
bar &
wait
Вывод распечатывается, поскольку он выходит к stdout или stderr, таким образом, существует много перекрытия:
[foo] output line 1
[bar] output line 1
[foo] output line 2
[bar] output line 2
Я хотел бы, чтобы вывод был распечатан последовательно (весь из foo
вывод, сопровождаемый всем из bar
вывод) так, чтобы было легче читать. Я должен записать вывод в файл, затем распечатать файл, или есть ли способ сделать это, не пишущий в файлы?
Каждый вывод записан в файл так или иначе, я не знаю о способе не использовать файлы. Я использовал бы tempfiles по мере необходимости, например:
$ a=$(mktemp)
$ b=$(mktemp)
$ echo 1 >$a & echo 2 >$b & wait
$ cat $b
2
$ cat $a
1
mktemp
создает два tempfiles a
и b
, echo
команды пишут в tempfiles, можно затем использовать cat
для печати от них в любое время, Вам нужен вывод. Если Вы хотите перенаправить и stdout и stderr, использовать &>
вместо этого.
Ну, система пишет в файлы так или иначе для выполнения этого; они - просто временные файлы. Однако Вы могли иметь foo
обработайте вывод в один файл и переименуйте его, когда завершенный. Иметь bar
наблюдайте за переименовыванием упомянутого файла, и когда foo
завершает переименовывание, панель производит foo
вывод затем печатает свой собственный вывод, а-ля:
function foo {
# do a bunch of things
# print a lot of output to /tmp/foo.work
# mv /tmp/foo.work /tmp/foo.done
}
function bar {
# do more things
# write more things to /tmp/bar.done
# if exist /tmp/foo.done print /tmp/foo.done else wait 1 and recheck
# rm /tmp/foo.done
# print /tmp/bar.done
}