Существует ли простой способ зарегистрировать все действие, которое делает сценарий оболочки?

Существует ли простой способ зарегистрировать все действие, которое происходит от сценария оболочки до файла?

У меня есть сценарий. Это производит вещи как эхо "инструкции", а также другой вывод программы. Я знаю команды:

command | tee -a "$log_file"

и

command >> logifle.log

То, что я спрашиваю, - существует ли параметр оболочки для входа, или набор управляет, чтобы я мог использовать или что-то как этот. Я не обязательно хочу добавить десятки перенаправлений или мишени в файлы, если я не имею к. Я все еще хочу произвести станд., хотя - я просто также хочу, чтобы он был зарегистрирован.:wq

18
задан 30 July 2015 в 14:55

2 ответа

если Вы обычно запускаете свой скрипт с 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.

18
ответ дан 23 November 2019 в 02:06

Существует очень легкий и удобный путь:

Используя 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 принята. (Большинство оболочек устанавливает эту переменную автоматически).

20
ответ дан 23 November 2019 в 02:06

Другие вопросы по тегам:

Похожие вопросы: