Я использую команду linux 'script' http://www.linuxcommand.org/man_pages/script1.html для регистрации всего ввода и вывода в интерактивном сценарии bash.
Сейчас мне нужно позвонить в script
команду, затем запустите мой сценарий bash, затем exit
.
Я хочу запустить script
и exit
команды из самого сценария bash. Как я могу это сделать?
я пробовал script -a
но это не работает для интерактивных скриптов.
Будем очень благодарны любой помощи.
"script" разветвляет оболочку (или команду, указанную с помощью "-c"), поэтому я не думаю, что вы можете вызвать "script" из сценария, который вы хотите "script".
Возьмем этот (раздражающий) интерактивный сценарий оболочки (называемый «fred»):
#!/bin/bash
while read -p 'Pete and Repeat were on a boat. Pete jumped off. Who was left? ' WHO
do
:
done
Запустите его и "запишите" взаимодействие с файлом:
[myles@marklar ~]$ script -c ~/fred fred.log
Script started, file is fred.log
Pete and Repeat were on a boat. Pete jumped off. Who was left? Repeat
Pete and Repeat were on a boat. Pete jumped off. Who was left? Repeat
Pete and Repeat were on a boat. Pete jumped off. Who was left? Repeat
Pete and Repeat were on a boat. Pete jumped off. Who was left? Script done, file is fred.log
Файл журнала содержит:
[myles@marklar ~]$ cat fred.log
Script started on Mon 12 Nov 2012 11:44:41 PM EST
Pete and Repeat were on a boat. Pete jumped off. Who was left? Repeat
Pete and Repeat were on a boat. Pete jumped off. Who was left? Repeat
Pete and Repeat were on a boat. Pete jumped off. Who was left? Repeat
Pete and Repeat were on a boat. Pete jumped off. Who was left?
Script done on Mon 12 Nov 2012 11:44:51 PM EST
Короче говоря, насколько мне известно, вам придется вызывать свой интерактивный сценарий оболочки с помощью команды "script".
Вы можете тривиально перенаправить весь вывод вашего скрипта в файл, используя следующую конструкцию:
exec &> /your/script.log
Кроме того, bash позволяет вам регистрировать все выполняемые им команды, весь получаемый ввод и все расширения, которые он выполняет, когда вы добавляете следующее:
set -x
Если это первые две строки вашего скрипта, все, что делает скрипт, будет регистрироваться.