Клонирование пути легко, если вы можете запустить вашу терминальную программу из командной строки. Предполагая, что вы используете xterm
, просто запустите xterm &
из терминала терминала, который вы хотите клонировать. Новый xterm будет запускаться в том же каталоге, если только вы не настроили его для запуска в качестве оболочки входа в систему. Любые экспортированные переменные среды также будут перенесены, но не экспортированные переменные - нет.
Быстрый и грязный способ клонирования всей среды (включая неэкспортированные переменные) заключается в следующем:
# from the old shell:
set >~/environment.tmp
# from the new shell:
. ~/environment.tmp
rm ~/environment.tmp
Если вы установили какие-либо пользовательские параметры оболочки, вам придется также повторно применить их.
Вы можете обернуть весь этот процесс в легко запускаемый скрипт. Сценарий сохранит среду в известный файл, затем запустите xterm
. Сделайте так, чтобы ваш .bashrc проверил этот файл, а затем отправьте его и удалите, если он найден.
С другой стороны, если вы не хотите запускать один терминал с другого или просто хотите больше контроля, вы можете использовать пару функций, которые вы определили в .bashrc:
putstate () {
declare +x >~/environment.tmp
declare -x >>~/environment.tmp
echo cd "$PWD" >>~/environment.tmp
}
getstate () {
. ~/environment.tmp
}
РЕДАКТИРОВАТЬ : Изменено putstate
так, чтобы он копировал «экспортированное» состояние переменных оболочки, чтобы соответствовать другому методу. Есть и другие вещи, которые также могут быть скопированы, такие как параметры оболочки (см. help set
) - так что в этом скрипте есть место для улучшения.
bash
запускает команды в файле и затем завершается, и текущая среда оболочки не меняется.Если вы запустите
screen
(GNU Screen) в своей определенной среде, эта среда будет использоваться подпроцессом (т.е.screen
), и вы можете использовать его для создания новых терминалов. Но если вы хотите раскошелиться в другой раз (ascreen
in ascreen
), это будет сложно.источник
В аналогичной ситуации я также счел полезным запустить новую оболочку в том же каталоге, что и текущая. Я использовал такой рецепт, чтобы запустить оболочку.
Опция -t необходима всякий раз, когда вы явно запускаете оболочку, используя ssh. Это приводит к созданию псевдотетти для процесса. Это необходимо для правильной работы команд истории и других интерактивных функций. Более ранние строки в сценарии устанавливают DIR в текущий каталог, а SHELL - в предпочитаемую пользователем оболочку.
источник
в то время как экспортированные переменные перебираются на другую сторону, используя вышеуказанную функцию 'getstate', по какой-то причине они в конечном итоге не экспортируются туда (как можно увидеть, используя простой os.getenv из python). мне кажется, это работает лучше, когда я изменяю getstate в качестве псевдонима:
источник