Файл .bashrc зацикливает команду «script» - PullRequest
0 голосов
/ 05 ноября 2019

Я пытаюсь настроить небольшой сценарий оболочки с помощью команды linux «script» для регистрации каждого ввода на моем компьютере с Kali Linux.

#!/bin/bash
now=$(date +"%m_%d_%Y_%H:%M:%S")
script /root/Logs/log_$now.txt

Кажется, что сам сценарий работает, но я хочудобавьте его в автозапуск bash, поэтому всякий раз, когда я открываю терминал, выполняется мой шеллскрипт.

Я пытался добавить его в свой файл .bashrc, но когда я сейчас открываю терминал, скрипт зацикливается. Я добавил простой скрипт "echo 'test'", и он запускается только один раз при запуске терминала. Добавление сценария в мой файл .profile и выполнение .profile вручную работает, как и предполагалось, но как только я ввожу сценарий с помощью команды «script» в мой .bashrc, он зацикливается.

Заранее спасибо.

Ответы [ 2 ]

3 голосов
/ 05 ноября 2019

Новое окно терминала - это один способ запуска новой интерактивной оболочки, но так же работает script. Вы хотите запускать script только в первом случае, а не в в каждом случае.

script сама устанавливает переменную в среде, чтобы вы знали, если вы уже находитесь вОболочка запущена script. Проверьте эту переменную, прежде чем пытаться снова запустить script.

if [[ -z $SCRIPT ]]; then
    now=$(date +"%m_%d_%Y_%H:%M:%S")
    script /root/Logs/log_$now.txt
fi

Значение SCRIPT, если задано, является именем файла, в который выполняется запись.

В качестве альтернативы,вы можете настроить эмулятор терминала для непосредственного запуска script, вместо того, чтобы он продолжал открывать обычную интерактивную оболочку, и вы пытаетесь изменить ее конфигурацию .


Приведенное выше применимок BSD script;для GNU script вы должны будете установить такую ​​переменную самостоятельно.

if [[ -z $SCRIPT ]]; then
  now=$(date +"%m_%d_%Y_%H:%M:%S")
  export SCRIPT=/root/Logs/log_$now.txt
  script "$SCRIPT"
fi
2 голосов
/ 05 ноября 2019

Команда script (1) открывает новую интерактивную оболочку.

Файл .bashrc запускается на каждой запущенной интерактивной оболочке bash, следовательно, ваша бесконечная рекурсия.

Если вы хотитечто-то для запуска только в оболочке входа в систему, вы помещаете это в .bash_profile.

Это должно избежать бесконечной рекурсии.

...