Есть ли простой способ записать все действия, которые происходят от сценария оболочки в файл?
У меня есть сценарий. Он выводит такие вещи, как эхо "инструкции", а также вывод других программ. Я знаю команды:
command | tee -a "$log_file"
и
command >> logifle.log
Я спрашиваю, есть ли параметр оболочки для ведения журнала, команда set, которую я могу использовать, или что-то в этом роде. Я не обязательно хочу добавлять десятки перенаправлений или тройник в файлы, если мне не нужно. Я все еще хочу получить вывод std, хотя - я просто хочу, чтобы он был зарегистрирован .:wq
Ответы:
если вы обычно запускаете свой скрипт с помощью
foo.sh
, попробуйте запустить его (при условии, что это скрипт bash) с помощьюbash -x foo.sh
. Если вы хотите, чтобы все перенаправлялось в файл, попробуйтеbash -x foo.sh > file.log 2>&1
(обратите внимание, что я также перенаправляю stderr, удалите,2>&1
если вы этого не хотите). Если вы хотите увидеть , что происходит,bash -x foo.sh 2>&1 | tee log.file
.источник
Есть очень простой и удобный способ:
Использование
script
для создания машинописи терминальной сессииЗапустите команду
script
Если аргумент
file
задан, напримерscript ~/tmp/output
,script
сохраняет диалог в этом файле. Если имя файла не указано, диалог сохраняется в файлеtypescript
Запустите ваш скрипт или что вы хотите начать
Если ваш скрипт закончен, остановитесь
script
через Ctrl-DПроверьте вывод в файле вывода по умолчанию
typescript
Чтобы запустить команду за один шаг
script
, используйте параметр-c
Использование
script
внутри вашего скрипта не имеет смысла, потому чтоscript
разветвляется или запускает новую оболочку.источник
script logfilename
, так что я могу выбрать это.script
полезен также мониторинг через fifo. Fromman script
: "-f, --flush
Сбрасывать вывод после каждой записи. Это хорошо для телеоперации: один человек делаетmkfifo foo; script -f foo
, а другой может контролировать в реальном времени, что делается с помощьюcat foo
". Он также может быть использован для мониторинга, когда программа ожидает ввода или выполняется, например, путем отслеживания метки времени fifo.