Я пытаюсь программно открыть новый терминал и автоматически запустить пользовательский скрипт, который устанавливает различные переменные среды, чтобы подготовить его к интерактивному сеансу. Все это работает отлично, за исключением того, что полученный терминал нельзя редактировать, т. е. нет курсора. Моя текущая попытка выглядит так:
konsole -hold -e /path/to/bash/script/run_oenv.sh
где run_oenv.sh
это выглядит так (для простого тестирования):
echo hello world
export FOO=bar
При запуске указанная выше команда run_oenv.sh
выполняется успешно, и я вижу ожидаемый оператор отладки, отраженный в новом терминале, но я просто не могу понять, как сделать новый терминал интерактивным. Что я упускаю?
В конечном итоге скрипт bash должен будет сделать больше, чем просто задать переменные среды, но это самый простой тестовый случай.
Это на Centos 7/KDE.
решение1
При использовании -e
эмулятора терминала для выполнения команды он выполняет эту командувместооболочки, которую он бы запустил. Это означает, что он запускает ваш скрипт и больше ничего.
Если вы хотите запустить интерактивную bash
оболочку, которая будет использовать ваш файл, используйте bash
ее --rcfile
параметр командной строки:
konsole -hold -e bash --rcfile /path/to/bash/script/run_oenv.sh
Обратите внимание, что это делаетbash
нетпрочитайте ~/.bashrc
файл. Если вы все еще хотите source ~/.bashrc
, как это обычно происходит в сеансах интерактивной оболочки, вы можете сделать это из своего run_oenv.sh
кода:
[ -f "$HOME/.bashrc" ] && source "$HOME/.bashrc"
или без синтаксиса сокращенного кода,
if [ -f "$HOME/.bashrc" ]; then
source "$HOME/.bashrc"
fi
(вероятно, в верхней части файла, run_oenv.sh
чтобы ваш файл переопределил любые переменные или настройки в ~/.bashrc
)