У меня есть bash script, который имеет следующие две команды:
ssh host tail -f /some/file | awk ..... > /some/file &
ssh host tail -f /some/file | grep .... > /some/file &
Как я могу сделать вывод обеих команд в один и тот же файл.
У меня есть bash script, который имеет следующие две команды:
ssh host tail -f /some/file | awk ..... > /some/file &
ssh host tail -f /some/file | grep .... > /some/file &
Как я могу сделать вывод обеих команд в один и тот же файл.
Заметьте, что вы можете уменьшить количество вызовов ssh:
{ ssh host tail -f /some/file |
tee >(awk ...) >(grep ...) >/dev/null
} > /some/file &
Пример:
{ echo foobar | tee >(sed 's/foo/FOO/') >(sed 's/bar/BAR/') > /dev/null; } > outputfile
cat outputfile
fooBAR
FOObar
Используйте "append" с помощью >>
или используйте фигурные скобки для включения перенаправления ввода-вывода или (иногда) используйте exec
:
ssh host tail -f /some/file | awk ..... > /some/file &
ssh host tail -f /some/file | grep .... >> /some/file &
или
{
ssh host tail -f /some/file | awk ..... &
ssh host tail -f /some/file | grep .... &
} > /some/file
или
exec > /some/file
ssh host tail -f /some/file | awk ..... &
ssh host tail -f /some/file | grep .... &
После exec
стандартный вывод script в целом идет на /some/file
. Я редко использую эту технику; Обычно я использую метод { ...; }
.
Примечание. Вы должны быть осторожны с обозначением скобок. То, что я показал, будет работать. Пытаясь сгладить его на одну строку, вам нужно обработать {
, как если бы это была команда (за которой следует пробел, например), а также для обработки }
, как если бы это была команда. У вас должен быть терминатор команд до }
- я использовал новую строку, но также работал бы &
для фона или ;
.
Таким образом:
{ command1; command2; } >/some/file
{ command1 & command2 & } >/some/file
Я также не рассмотрел вопрос о том, почему у вас есть две отдельные операции tail -f
, запущенные в одном удаленном файле, и почему вы не используете awk
power в качестве супер- grep
для обработки всего этого в одном - Я только обратился к вопросу о том, как перенаправить ввод/вывод двух команд в один файл.
Лучший ответ на этот вопрос - вероятно, избавиться от строки ssh .... | grep ...
и изменить awk
script в другой команде, чтобы добавить функциональность, которую вы получали от команды grep
...
Это избавит вас от любых проблем с перемежением в качестве бонусного побочного эффекта.