Não consigo definir um novo $ PATH de modo que ele seja usado ao executar comandos via ssh user@host command
. Tentei adicionar export PATH=$PATH:$HOME/new_path
ao ~ / .bashrc e ~ / .profile na máquina remota, mas a execução ssh user@host "echo \$PATH"
mostra que a alteração não foi detectada (mostra / usr / local / sbin: / usr / local / bin: / usr / sbin: / usr / bin: / sbin: / bin: / usr / games). A máquina remota está executando o Ubuntu 8.04.
Tenho certeza de que poderia invadir o arquivo / etc / profile, mas essa não é uma solução limpa e só funciona quando se tem acesso root.
export PATH=$PATH:$HOME/new_path
os arquivos ~ / .bash_login e ~ / .bash_profile (além dos ~ / .bashrc e ~ / .profile anteriormente testados). Nem funciona. Nos dois casos, tive que criar o arquivo.Respostas:
Como o grawity disse, ~ / .bashrc é o que você deseja, pois é originário de shells não interativos e sem logon.
Espero que o problema que você está tendo tenha a ver com o arquivo padrão Ubuntu ~ / .bashrc. Geralmente começa com algo como isto:
Você deseja colocar qualquer coisa para shells não interativos antes desta linha.
fonte
export PATH=$PATH:$HOME/new_path
linha acima e funcionou. Obrigado!.zshenv
para os usuários zsh, ele me levou muito tempo para encontrá-lo nos comentários sobre outras respostasVocê tem um
~/.bash_login
ou~/.bash_profile
?O Bash no modo interativo verifica esses arquivos e usa o primeiro existente , nesta ordem:
~/.bash_profile
~/.bash_login
~/.profile
Portanto, se você tiver um
~/.bash_profile
, as alterações que fizer~/.profile
serão deixadas sem serem vistas.O Bash no modo não interativo às vezes lê o arquivo
~/.bashrc
(que também é frequentemente originário dos scripts interativos). Por "às vezes", quero dizer que depende da distribuição: estranhamente, há uma opção em tempo de compilação para habilitar isso. . O Debian permite a~/.bashrc
leitura, enquanto, por exemplo, o Arch não.ssh
parece estar usando o modo não interativo,então~/.bashrc
deve ser o suficiente. Ao ter problemas como esse, geralmente adiciono alguns ecos para ver quais arquivos estão sendo executados.fonte
~/.bashrc
"? Não vejo essa declaração na página de manual. Obrigado~/.bashrc
, parece que você precisa definir adicionalmente a variável de ambienteBASH_ENV
; consulte superuser.com/a/585699/100843 . Para shells de logon não interativos, você provavelmente precisará modificar um dos três scripts de inicialização mencionados..zshenv
.zshenv
é sempre originário; não importa se é interativo ou não.A documentação do ssh diz:
é por isso que adicionar aos arquivos bashrc não funciona. no entanto, você tem as seguintes opções:
Se a
PermitUserEnvironment
opção estiver definida na configuração do sshd, você poderá adicionar sua configuração PATH ao~/.ssh/environment
ssh remotemachine 'bash -l -c "somecommand"'
fonte
man sshd_config
diz que está desativado por padrão, portanto, é improvável que esta solução funcione para a maioria das pessoas. 2. Isso funcionaria, mas não posso modificar facilmente o comando enviado ao ssh (veja o segundo comentário na minha pergunta).Você sempre pode dizer:
fonte
Além da resposta @signpolyma, você precisará adicionar sua exportação antes dessas linhas
fonte
Só tive o mesmo problema, resolvi-o com:
fonte