Não é possível recuperar a variável de perfil usando ssh.
server2 == & gt; usuário apptst == & gt; O perfil bash tem a variável $ APPHOME.
Estava tentando recuperar o valor do server1 usando ssh mas falhou.
Opções usadas abaixo
server1> ssh apptst@server2 'echo $APPHOME'
server1> ssh apptst@server2 echo '$APPHOME'
server1> ssh apptst@server2 echo "$APPHOME"
server1> ssh apptst@server2 "echo $APPHOME"
quando tentei
server1> ssh apptst@server2 ls -ld $APPHOME
Funciona bem.
Alguma sugestão que está faltando e como posso obter a variável do servidor2?
linux
bash
ssh
environment-variables
KumarJohn
fonte
fonte
$APPHOME
e não server2. Verifique por exemplo comcd / && ssh apptst@server2 'echo $PWD'
(você precisa dessas citações'
, caso contrário, novamente shell no server1 irá expandir), que retornará/
e não~
.Respostas:
Este comando deve funcionar:
'
aspas para passar esse comando completo para ssh como um argumento; isso também impede que o shell no server1 se expanda$APPHOME
em sibash -l
inicia um shell de login, que lê nos arquivos de perfis, onde $ APPHOME é definido (como @chepner apontou em sua resposta, isso não é padrão quando invocado pelo sshd)-c
executa o próximo argumento, novamente com aspas que o comando echo completo é executado.\$
é necessário, porque senão o shell pai (não-login) qual sshd chama (e que herda o ambiente diretamente do init (*)) expande$APPHOME
. Mas isso é cedo demais$APPHOME
só fica definido para entrar conchas (via~/.profile
). [ adicionou este ponto após comentário do OP ](*) me corrijam, se eu estiver errado aqui.
fonte
ssh apptst@server2 'bash -l -c "set | grep ^APPHOME"'
O problema é que quando você especifica um comando exato para executar via
ssh
, o remotosshd
faz não inicie um shell de login para executá-lo, mas um shell não interativo regular. Nesse caso,.bash_profile
não é executado, e assimAPPHOME
não está definido.E enquanto digita isso, mph postou o solução correta forçar um shell de login que processa
.bash_profile
.fonte