Надіслати копію вихідного сценарію у файл


10

Скажіть, у мене є сценарій Zsh і що я хотів би дозволити йому друкувати вихід STDOUT, а також скопіювати (скинути) його вихід у файл на диску.

Більше того, сценарій починається з наступної опції

set -o xtrace

що змушує його бути багатослівним і друкувати, які команди він виконує. Я хотів би захопити цей вихід також у файл на диску.

Я розумію, що якщо це зробити

./my_script.sh > log.txt

це буде просто послати STDOUTдо log.txt, але що , якщо я хочу , щоб бути в змозі побачити вихід в терміналі?

Я читав про teeта MULTIOSваріант у Zsh, але не знаю, як ними користуватися.

Коли я роблю:

./my_script | tee log.txt

Я бачу вихід на терміналі, але цей файл не log.txtвважає захоплюючим все (насправді він фіксує ледь нічого).


./my_script.sh > log.txt 2>&1
mikeserv

Схоже, ви шукаєте scriptкоманду. А можеmyscript >&1 > log.txt 2>&1
Стефан Шазелас

Відповіді:


12

Можливо, ваш скрипт виробляє вихід до stdoutта stderr, і ви отримуєте лише один з цих потоків у свій файл журналу.

./my_script.sh | tee log.txtдійсно виведе все на термінал, але скине лише stdoutдо журналу.

./my_script.sh > log.txt 2>&1 зробить навпаки, скидаючи все до файлу журналу, але нічого не відображаючи на екрані.

Хитрість полягає в поєднанні двох з tee:

./myscript.sh 2>&1 | tee log.txt

Це перенаправляє stderr( 2) в stdout( 1), потім передає stdoutв tee, який копіює його в термінал і в файл журналу.

zshMultios еквівалент буде:

./myscript.sh >&1 > log.txt 2>&1

Тобто, перенаправляємо stdout як на вихідний stdout, так і на log.txt (внутрішньо через трубу на щось, що працює tee), а потім перенаправляємо stderr також на це (на трубу до внутрішнього teeпроцесу).


Спасибі - Щодо останнього рядка, чому б і ні ./myscript.sh >&1 2>&1 > log.txt? (тобто переключення порядку двох останніх переадресацій). Чи буде різниця між ними?
Амеліо Васкес-Рейна

Ваш варіант не виводиться на stdout, а лише на log.txt. Останній рядок у відповіді (доданий @ StéphaneChazelas, а не я) виводить обох.
савато

0

nohup дозволяє виконувати роботу, навіть якщо консоль загине або закрита, корисна для тривалих резервних копій тощо, але тут ми використовуємо її автоматичну реєстрацію.

nohup myscript.sh & ; tail -f nohup.out
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.