Existe uma maneira que eu possa usar $ PATH como definido pelo meu perfil bash?

3

Passo a maior parte do meu dia em servidores. Eu tenho uma série de aliases / functions / scripts que me permitem digitar p hostname do terminal e executar a tela GNU (1) no lado remoto, usando o seguinte comando:

exec ssh hostname -t 'screen -RD''

Eu só notei recentemente que ssh -t não recebe meu $PATH personalizado. Aqui está uma saída de terminal:

adam@workstation:~:0$ sh server 'echo $PATH'
/home/adam/bin:/usr/local/bin:/bin:/usr/bin:/opt/git/bin:/opt/git/libexec/git-core
adam@workstation:~:0$ ssh server -t 'echo $PATH'
/usr/local/bin:/bin:/usr/bin
Connection to uranus.plymouth.edu closed.

Meu maior problema é que meus aliases personalizados tentam executar screen , pois não posso garantir um caminho absoluto e meu $PATH está estruturado para que o shell encontre o caminho correto. Se minhas configurações de $PATH não forem cumpridas, meus scripts não funcionarão. Existe uma maneira de usar $PATH conforme definido pelo meu .bashrc / .bash_profile ?

Acredito que PermitUserEnvironment está desativado.

    
por Annika Backstrom 16.02.2010 / 14:58

4 respostas

1

Se você puder alterar o comando que seus aliases usam, você pode fazer com que o lado remoto crie uma instância “interativa”, “login” de bash (ou seja, uma que use seu .bashrc e .bash_profile ) para executar tela :

ssh server -t 'exec bash -ilc "exec screen -RD"'

Se, além disso, você não estiver obtendo seu ambiente normal (PATH, configurações de shell, etc.) nos shells criados dentro da tela , talvez seja necessário informar tela para criar invólucros de "login". Coloque shell -bash no seu .screenrc nos finais remotos ou adicione -s -bash à sua tela invocação:

ssh server -t 'exec bash -ilc "exec screen -RDs -bash"'

Isso certamente executará seu .bash_profile duas vezes (uma vez antes da tela , uma vez para cada shell criado dentro da tela ). Dependendo de como você faz suas manipulações PATH, isso pode levar a várias cópias das mesmas adições ao seu PATH (isso geralmente não é um problema).

    
por 22.06.2010 / 18:20
0

Seu $ PATH personalizado é provavelmente definido em um .bashrc que sai quando executado sob o ambiente pseudo-tty de ssh -t ... .

Eu não tenho nenhuma experiência direta com isso, mas eu aposto que se você inspecionar o .bashrc você verá que sair se $ PS1 não estiver definido, ou [-t 1] falhar, ou algo assim, antes de definir o $ PATH. E se você experimentar, provavelmente encontrará ssh server 'try_that_test' e ssh server -t 'try_that_test' resultados diferentes.

Provavelmente, você pode consertá-lo, tornando o teste mais complexo, para verificar se você está executando em ssh.

    
por 16.02.2010 / 15:25
0

.bashrc e .bash_profile são processados apenas para shells interativos , que qualquer shell que executa um programa como screen (ou echo nos casos de teste) não é. Leia a página man bash sobre a variável de ambiente BASH_ENV , que pode ser configurada para executar um script de início para shells não interativos.

    
por 17.02.2010 / 00:02
0

Você também pode usar ~/.ssh/rc ou ~/.ssh/environment . Veja a página sshd(8) man.

    
por 07.04.2010 / 04:54