Специальный трубопровод / перенаправление в Баш
(Сначала я искал час, поэтому я уверен, что это не повторение)
Мне нужно написать скрипт, который выполняет 1 команду, 1 раз, а затем делает следующее:
- Сохраняет как stdout, так и stderr в файл (сохраняя их правильный порядок)
- Сохраняет stderr только в переменную.
Проработка в пункте 1, если у меня есть файл, как это
echo "one"
thisisanerrror
echo "two"
thisisanotherError
Я должен ожидать увидеть вывод, сопровождаемый ошибкой, сопровождаемый выводом, сопровождаемым большим количеством ошибки (таким образом, сцепление не достаточно).
Самое близкое, что я получил, это следующее, которое, кажется, повредило файл журнала:
errs=`((./someCommand.sh 2>&1 1>&3) | tee /dev/stderr ) 3>file.log 2>&3 `
1 ответ
Это может быть отправной точкой:
Как мне написать stderr в файл при использовании "тройника" с каналом?
Редактировать:
Это похоже на работу:
((./foo.sh) 2> >(tee >(cat) >&2)) > foo.log
Разделите stderr на tee, запишите одну копию в stdout (cat) и запишите другую в stderr. После этого вы можете взять весь стандартный вывод и записать его в файл.
Редактировать: сохранить вывод в переменной
varx=`((./foo.sh) 2> >(tee >(cat) >&2))`
Я также видел команду, заключенную в дополнительные двойные кавычки, но я понятия не имею, для чего это может быть полезно.