Le clonage du chemin est facile si vous pouvez exécuter votre programme de terminal à partir de la ligne de commande. En supposant que vous utilisez xterm
, exécutez simplement à xterm &
partir de l'invite du terminal que vous souhaitez cloner. Le nouveau xterm démarrera dans le même répertoire, sauf si vous l'avez configuré pour démarrer en tant que shell de connexion. Toutes les variables d'environnement exportées seront également reportées, mais pas les variables non exportées.
Un moyen rapide et sale de cloner tout l'environnement (y compris les variables non exportées) est le suivant:
# from the old shell:
set >~/environment.tmp
# from the new shell:
. ~/environment.tmp
rm ~/environment.tmp
Si vous avez défini des options de shell personnalisées, vous devrez également les réappliquer.
Vous pouvez envelopper tout ce processus dans un script facilement exécutable. Demandez au script d'enregistrer l'environnement dans un fichier connu, puis exécutez-le xterm
. Demandez à votre .bashrc de rechercher ce fichier, sourcez-le et supprimez-le s'il est trouvé.
Alternativement, si vous ne voulez pas démarrer un terminal à partir d'un autre, ou si vous voulez simplement plus de contrôle, vous pouvez utiliser une paire de fonctions que vous définissez dans .bashrc:
putstate () {
declare +x >~/environment.tmp
declare -x >>~/environment.tmp
echo cd "$PWD" >>~/environment.tmp
}
getstate () {
. ~/environment.tmp
}
EDIT : modifié de putstate
sorte qu'il copie l'état "exporté" des variables du shell, afin de correspondre à l'autre méthode. Il y a aussi d'autres choses qui pourraient être copiées, comme les options du shell (voir help set
) - il y a donc place à amélioration dans ce script.
bash
exécuterait les commandes dans le fichier, puis se fermerait, et l'environnement du shell actuel ne changerait pas.Si vous démarrez un
screen
(écran GNU) dans votre environnement défini, cet environnement sera utilisé par le sous-processus (c'est-à-direscreen
) et vous pouvez l'utiliser pour faire apparaître de nouveaux terminaux. Mais si vous voulez le bifurquer une autre fois (ascreen
en ascreen
) cela commence à être délicat.la source
Dans une situation similaire, j'ai également trouvé utile de démarrer le nouveau shell dans le même répertoire que l'actuel. J'ai utilisé une recette comme celle-ci pour démarrer le shell.
L'option -t est nécessaire chaque fois que vous exécutez explicitement un shell à l'aide de ssh. Il provoque la création d'un pseudo-tty pour le processus. Cela est nécessaire pour que les commandes d'historique et les autres fonctionnalités interactives fonctionnent correctement. Des lignes antérieures du script définissaient DIR sur le répertoire courant et SHELL sur le shell préféré de l'utilisateur.
la source
tandis que les variables exportées arrivent de l'autre côté en utilisant la fonction 'getstate' ci-dessus, pour une raison quelconque, elles finissent par ne pas y être exportées (comme on peut le voir en utilisant un simple os.getenv de python). cela semble fonctionner mieux pour moi lors de la modification de getstate pour être un alias:
la source