A clonagem do caminho é fácil se você puder executar o programa do terminal na linha de comando. Supondo que você esteja usando xterm
, basta executar a xterm &
partir do prompt do terminal que você deseja clonar. O novo xterm será iniciado no mesmo diretório, a menos que você o tenha configurado para iniciar como um shell de login. Quaisquer variáveis de ambiente exportadas também serão transferidas, mas variáveis não exportadas não serão.
Uma maneira rápida e suja de clonar todo o ambiente (incluindo variáveis não exportadas) é a seguinte:
# from the old shell:
set >~/environment.tmp
# from the new shell:
. ~/environment.tmp
rm ~/environment.tmp
Se você definiu alguma opção de shell personalizada, precisará reaplicá-las também.
Você pode agrupar todo esse processo em um script facilmente executável. Faça com que o script salve o ambiente em um arquivo conhecido e execute xterm
. Faça com que o seu .bashrc verifique esse arquivo, origine-o e exclua-o, se encontrado.
Como alternativa, se você não deseja iniciar um terminal a partir de outro, ou apenas deseja mais controle, poderá usar um par de funções definidas em .bashrc:
putstate () {
declare +x >~/environment.tmp
declare -x >>~/environment.tmp
echo cd "$PWD" >>~/environment.tmp
}
getstate () {
. ~/environment.tmp
}
EDIT : Alterado putstate
para que ele copie o estado "exportado" das variáveis do shell, para corresponder ao outro método. Há outras coisas que também podem ser copiadas, como opções de shell (consulte a help set
) - para que haja espaço para melhorias nesse script.
bash
executaria os comandos no arquivo e sairia, e o ambiente atual do shell não mudaria.Se você iniciar um
screen
(Tela GNU) em seu ambiente definido, esse ambiente será usado pelo subprocesso (ou sejascreen
) e você poderá usá-lo para gerar novos terminais. Mas se você quiser bifurcar outra vez (ascreen
em ascreen
), isso começará a ser complicado.fonte
Em uma situação semelhante, também achei útil iniciar o novo shell no mesmo diretório que o atual. Eu usei uma receita como esta para iniciar o shell.
A opção -t é necessária sempre que você executa explicitamente um shell usando ssh. Faz com que um pseudo-tty seja criado para o processo. Isso é necessário para que os comandos do histórico e outros recursos interativos funcionem corretamente. As linhas anteriores do script definem DIR no diretório atual e SHELL no shell preferido do usuário.
fonte
enquanto as variáveis exportadas chegam ao outro lado usando a função 'getstate' acima, por algum motivo elas acabam não sendo exportadas para lá (como pode ser visto usando um simples os.getenv do python). parece funcionar melhor para mim ao modificar o getstate para ser um alias:
fonte