Posso gerar um novo terminal que seja um clone do terminal atual?

7

Então, vamos dizer que estou desenvolvendo código no diretório / asdf / qwer / dfgh / wert / asdf / qwer e adicionei cerca de mais três diretórios como esse para o meu caminho e tenho um monte de variáveis de ambiente arcano definidas. Então eu percebo que eu realmente preciso de outro terminal aberto e configurado exatamente desta mesma maneira (embora essa necessidade não seja recorrente, então eu apenas alteraria meu .bashrc). Existe algum comando para abrir uma nova janela de terminal que seja um clone exato deste?

    
por John Berryman 19.01.2011 / 06:09

4 respostas

8

Clonar o caminho é fácil se você puder executar seu programa de terminal a partir da linha de comando. Assumindo que você está usando xterm , apenas execute xterm & no prompt do terminal que você deseja clonar. O novo xterm será iniciado no mesmo diretório, a menos que você tenha configurado para iniciar como um shell de login. Quaisquer variáveis de ambiente exportadas também serão transferidas, mas não serão exportadas.

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ê tiver definido alguma opção personalizada de shell, terá que reaplicar essas opções também.

Você pode envolver 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 . Peça ao seu .bashrc para verificar esse arquivo, e fonte e excluí-lo, se encontrado.

Como alternativa, se você não quiser iniciar um terminal de outro, ou apenas quiser mais controle, poderá usar um par de funções que você define em .bashrc:

putstate () {
    declare +x >~/environment.tmp
    declare -x >>~/environment.tmp
    echo cd "$PWD" >>~/environment.tmp
}

getstate () {
    . ~/environment.tmp
}

EDIT : Alterou putstate para que copie o estado "exportado" das variáveis do shell, para corresponder ao outro método. Há outras coisas que podem ser copiadas também, como opções de shell (veja help set ) - então há espaço para melhorias neste script.

    
por 19.01.2011 / 06:41
0

Se você iniciar um screen (GNU Screen) em seu ambiente definido, esse ambiente será usado pelo subprocesso (ou seja, screen ) e você poderá usá-lo para gerar novos terminais. Mas se você quiser usar outra vez (um screen em screen ), ele começa a ser complicado.

    
por 19.01.2011 / 06:41
0

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 essa para iniciar o shell.

exec ssh -t $HOST "cd $DIR; $SHELL $parms"

A opção -t é necessária sempre que você executar explicitamente um shell usando ssh. Isso faz com que uma pseudo-tty seja criada para o processo. Isso é necessário para que os comandos de histórico e outros recursos interativos funcionem corretamente. Linhas anteriores no script definiam o DIR para o diretório atual e SHELL para o shell preferido do usuário.

    
por 19.01.2011 / 18:37
0

enquanto as variáveis exportadas chegam ao outro lado usando a função 'getstate' acima, por algum motivo elas acabam não sendo exportadas 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:

alias getstate=". ~/environment.tmp"
    
por 12.02.2014 / 10:10