Хочу распечатать вывод двух фоновых функций оболочки последовательно

У меня есть две функции в моих сценариях оболочки, которые я выполняю в фоне:

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вывод) так, чтобы было легче читать. Я должен записать вывод в файл, затем распечатать файл, или есть ли способ сделать это, не пишущий в файлы?

1
задан 1 November 2018 в 20:17

2 ответа

Каждый вывод записан в файл так или иначе, я не знаю о способе не использовать файлы. Я использовал бы 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, использовать &> вместо этого.

4
ответ дан 3 December 2019 в 06:50

Ну, система пишет в файлы так или иначе для выполнения этого; они - просто временные файлы. Однако Вы могли иметь 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  
}  
0
ответ дан 3 December 2019 в 06:50

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

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