Quando executo meu programa interativamente, ele funciona bem:
ssh somehost
$ ~/some/path/somescript.py
Quando executo meu programa diretamente no ssh, ele não funciona. A variável PYTHONPATH
não está definida, porque .bashrc
não é originada.
ssh somehost ~/some/path/somescript.py
Se eu correr ssh somehost 'source ~/.bashrc; ~/some/path/somescript.py'
, funciona bem.
Mas o último não funcionaria para outras pessoas, por exemplo, usando o tcsh e não tendo um ~/.bashrc
).
Qual é o comando para executar uma coisa via ssh em outro host que funcione para todos os shells?
bash
ssh
environment-variables
remote
bzdjamboo
fonte
fonte
bash
, ele origina.bash_profile
ou.profile
para um logon interativo e.bashrc
para um logon não interativo. Se o seu shell de login for chamado bash comosh
ou ash ou ksh, ele cria.profile
um logon interativo e nada para um logon não interativo.Respostas:
Não há arquivo padrão por usuário executado para logins não interativos. Você precisa tornar o programa independente, para poder encontrar suas dependências sem depender de variáveis de ambiente não padrão ou definir explicitamente o ambiente, geralmente com
Você não deve definir variáveis de ambiente em
.bashrc
: este arquivo é destinado a shells interativos e é lido em cada instância do bash. As variáveis de ambiente devem ser definidas.profile
, que são lidas quando você faz login. Além do número muito pequeno de pessoas que não usam um shell no estilo Bourne como seu shell de logon,.profile
funciona para todos, independentemente de usar bash ou zsh ou csh ou fish interativamente. Consulte também Diferença entre .bashrc e .bash_profile , Quais arquivos de instalação devem ser usados para configurar variáveis de ambiente com o bash? .Dito isto, existe uma maneira de obter um script sempre que você faz logon no ssh com uma chave específica. Consulte Existe uma maneira de enviar informações de configuração do shell ao fazer o SSH em um host? , sh arquivos de inicialização sobre ssh .
fonte
Eu tinha o mesmo problema, mas para mim a solução era diferente. Meu usuário não foi configurado para usar o bash como shell, mas sim o zsh como shell; portanto, os arquivos do bash dot não foram executados no logon. Abra / etc / passwd com um editor de texto e procure seu nome de usuário e qual shell ele usa:
É assim que minha entrada de usuário se parece. Observe que diz / bin / zsh em vez de / bin / bash. Para zsh, o arquivo de ponto correto é ~ / .zprofile. Seu conteúdo será executado toda vez que você fizer login usando ssh.
fonte