Я пытаюсь добавить в мой файл ~/.zshrc
команду для записи входов и выходов командной строки. У меня есть команда script
(https://www.tecmint.com/record-and-replay-linux-terminal-session-commands-using-script/), необходимая для выполнения, но у меня возникла проблема с ней, которая, похоже, бесконечно пытается записать мой сеанс. Я полагаю, что это связано с тем, что когда вы запускаете команду script
, она запускает новый сеанс bash, который, в свою очередь, запускает ~/.zshrc
, который затем пытается записать сеанс, который перезапускает сеанс (et c. и др c.). Это приводит к бесконечному количеству попыток записи сессии oop.
Попытка 1 Соответствующая часть моего ~/.zshrc
# RECORD COMMAND INPUT AND OUTPUT
LOG_PATH=/var/log/terminal/$(date +'%Y%m%d')
LOG_FILE=${LOG_PATH}/$(date +'%H%M%S').log
mkdir -p ${LOG_PATH}
script ${LOG_FILE}
This приводит к сеансу, который постоянно печатает следующее:
Script started, output file is /var/log/terminal/20200109/141849.log
Script started, output file is /var/log/terminal/20200109/141850.log
Script started, output file is /var/log/terminal/20200109/141851.log
Script started, output file is /var/log/terminal/20200109/141852.log
Script started, output file is /var/log/terminal/20200109/141853.log
Script started, output file is /var/log/terminal/20200109/141854.log
Script started, output file is /var/log/terminal/20200109/141855.log
... repeat infinitely ...
Попытка 2 Одна из попыток обойти эту проблему состояла в том, чтобы проверить, существует ли файл, и затем включить go с записью ( который работает несколько, но иногда он создает 2 файла, или иногда запись не начинается, скажем, если я открываю 2 сеанса команд в быстрой последовательности).
Обновленный сценарий
# RECORD COMMAND INPUT AND OUTPUT
# Check if the recording of a file for the given time has already started
# as it seems that once you start the script recording it re-starts the session
# which in turn re-runs this file which attempts to script again running into an infinite loop
LOG_PATH=/var/log/terminal/$(date +'%Y%m%d')
LOG_FILE=${LOG_PATH}/$(date +'%H%M%S').log
if [[ ! -f $LOG_FILE ]]; then
mkdir -p ${LOG_PATH}
script ${LOG_FILE}
fi
Опять это либо дает нет записи (в случае быстрого открытия 2 сессий) или это приводит к тому, что запись выполняется дважды
Script started, output file is /var/log/terminal/20200109/141903.log
Script started, output file is /var/log/terminal/20200109/141904.log
Попытка 3 Другая попытка была проверить историю bash и посмотреть если последняя команда содержала слово script
. Проблема с этой попыткой заключалась в том, что сеанс bash, по-видимому, не имел истории при запуске и, следовательно, выдавал следующую ошибку (а затем бесконечно пытался начать сеанс записи, как первая попытка):
# RECORD COMMAND INPUT AND OUTPUT
# Check what the last command was to make sure that it wasn't the script starting
# as it seems that once you start the script recording it re-starts the session
# which in turn re-runs this file which attempts to script again running into an infinite loop
LAST_HISTORY=$(history -1)
if [[ "$LAST_HISTORY" != *"script"* ]]; then
LOG_PATH=/var/log/terminal/$(date +'%Y%m%d')
LOG_FILE=${LOG_PATH}/$(date +'%H%M%S').log
mkdir -p ${LOG_PATH}
script ${LOG_FILE}
fi
Вывод
Last login: Thu Jan 9 14:27:30 on ttys009
Script started, output file is /var/log/terminal/20200109/142754.log
Script started, output file is /var/log/terminal/20200109/142755.log
omz_history:fc:13: no such event: 0
omz_history:fc:13: no events in that range
Script started, output file is /var/log/terminal/20200109/142755.log
omz_history:fc:13: no such event: 0
omz_history:fc:13: no events in that range
Script started, output file is /var/log/terminal/20200109/142755.log
Script started, output file is /var/log/terminal/20200109/142756.log
^C% danielcarmo@Daniels-MacBook-Pro-2 git %
Любые предложения или мысли по этому поводу будут высоко оценены.