Чи є простий спосіб зареєструвати всю діяльність, яку виконує скрипт оболонки?


18

Чи є простий спосіб зареєструвати всю активність, що відбувається від сценарію оболонки до файлу?

У мене є сценарій. Він виводить такі речі, як відлуння "інструкцій", а також інший вихід програми. Я знаю команди:

command | tee -a "$log_file"

і

command >> logifle.log

Що я запитую, чи є параметр оболонки для ведення журналу, або команда set, яку я можу використовувати, чи щось подібне. Я не обов'язково хочу додавати десятки переспрямувань або трійників у файли, якщо мені цього не потрібно. Я все ще хочу отримати вихід STD - я просто хочу, щоб він був записаний .:wq


5
LOL
,:

1
це монтує мою думку, що, здається, більшість людей роблять це замість: x
Вибачте і відновіть Моніку

Відповіді:


18

якщо ви зазвичай запускаєте свій скрипт foo.sh, спробуйте запустити його (припустимо, що це баш сценарій) за допомогою bash -x foo.sh. Якщо ви хочете, щоб все перенаправлено на файл, спробуйте bash -x foo.sh > file.log 2>&1(зверніть увагу, що я переспрямовую stderr, видаліть, 2>&1якщо ви цього не хочете). Якщо ви хочете побачити , що відбувається, bash -x foo.sh 2>&1 | tee log.file.


20

Є дуже простий і зручний спосіб:

Використовується scriptдля створення машинопису термінального сеансу

  1. Запустіть команду script

    Якщо аргумент fileнаводиться, наприклад script ~/tmp/output, scriptзберігається діалог у цьому файлі. Якщо ім'я файлу не вказано, діалог зберігається у файліtypescript

  2. Почніть свій сценарій або все, що хочете розпочати

  3. Якщо ваш сценарій закінчений, зупиніться scriptна Ctrl-D

  4. Перевірте вихідний файл у вихідному файлі за замовчуванням typescript


Щоб розпочати команду в один крок script, скористайтеся параметром-c

-c COMMAND
    Run the COMMAND rather than an interactive 
    shell. This makes it easy for a script to capture
    the output of a program that behaves differently
    when its stdout is not a tty.

Використання scriptвсередині вашого сценарію не має сенсу, оскільки scriptрозщеплює оболонку або запускає нову оболонку.

Якщо змінна SHELL існує, оболонка, роздвоєна сценарієм, буде цією оболонкою. Якщо SHELL не встановлений, передбачається оболонка Bourne. (Більшість оболонок встановлюють цю змінну автоматично).


4
@Fabby Мені подобається моя відповідь, але я не бачу маленької сірої речі;)
AB

Я використовую script logfilename, тому добираюсь до нього.
waltinator

чи можу я викликати "скрипт" зі своєї програми оболонки?
j0h

1
Це не має сенсу, дивіться мою вдосконалену відповідь.
AB

1
+1. Дякую за цю відповідь :-) scriptкорисний також моніторинг через фіфо. З man script: " -f, --flushОчищення результатів після кожного запису. Це добре для телекооперації: одна людина робить mkfifo foo; script -f foo, а інша може контролювати в реальному часі те, що робиться за допомогою cat foo". Він також може бути використаний для моніторингу, коли програма чекає на введення чи зроблена, наприклад, шляхом моніторингу часової мітки фіфо.
sudodus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.