Здесь показано, как выполнить одну или несколько команд, захватив стандартный вывод и ошибку, в том порядке, в котором они были сгенерированы , в лог-файл и отображая только стандартную ошибку на любом экране терминала, который вы лайк. Работает в Bash на Linux. Вероятно, работает в большинстве других сред. Я буду использовать пример, чтобы показать, как это делается.
Отборочные:
Открыть два окна (оболочки, сеансы tmux, что угодно)
Я продемонстрирую некоторые тестовые файлы, поэтому создайте тестовые файлы:
touch /tmp/foo /tmp/foo1 /tmp/foo2
в окне1:
mkfifo /tmp/fifo
0</tmp/fifo cat - >/tmp/logfile
Затем в окне 2:
(ls -l /tmp/foo /tmp/nofile /tmp/foo1 /tmp/nofile /tmp/nofile; echo successful test; ls /tmp/nofile1111) 2>&1 1>/tmp/fifo | tee /tmp/fifo 1>/dev/pts/2
Где вы заменяете /dev/pts/2
на тот, который вы хотите, чтобы выводил stderr.
Причиной различных успешных и неудачных команд в подоболочке является просто создание смешанного потока выходных сообщений и сообщений об ошибках, чтобы вы могли проверить правильность упорядочения в файле журнала. Как только вы поймете, как это работает, замените команды «ls» и «echo» скриптами или командами на ваш выбор.
При использовании этого метода порядок вывода и ошибки сохраняется, синтаксис прост и понятен, и имеется только одна ссылка на выходной файл. Плюс гибкость в размещении дополнительной копии stderr, где вы хотите.