Como posso garantir que o shell BASH SSH remoto inclua todos os elementos PATH

0

Então estou tentando rodar um script remotamente em ssh como ssh remote "~/bin/some_script.sh" porém o problema é que o script roda um comando vcs que parece não carregar quando tento apenas enviar o comando via ssh, como oposta a ssh'ing no controle remoto e manualmente executando o comando.

Para maior clareza, a saída a seguir aparece quando tento

$ ssh remote "cd/...; vcs -x -...;"
bash: vcs: command not found

mas funciona quando eu faço

$ ssh remote
remote$ vcs -x -...
remote$ //good output

Eu olhei mais para ele e quando eu corro simples

$ ssh remote "compgen -c | wc -l"
2611

vs

$ ssh remote
remote$ compgen -c | wc -l
3735

Então, claramente, há muitos comandos que não estão sendo "carregados" quando eu simplesmente passo comandos via ssh vs quando na verdade ssh em comandos remotos e de execução. Alguma ideia do que está acontecendo e como superar isso?

    
por marshall 01.03.2016 / 23:51

2 respostas

1

A execução de ssh remote "command" abre um shell não interativo , portanto, ele não fornece arquivos regulares ao abrir. Eu cavei mais fundo e descobri que claramente $PATH estava faltando algum /bins quando executado de forma não interativa. Minha solução é fornecer a pasta necessária ao executar o script ssh remote "~/bin/some_script.sh"

#!/bin/bash
. /etc/.../sourced_script.sh
# script

A única desvantagem é que você deve se lembrar de criar esse script em todos os scripts que deseja executar remotamente. Talvez haja uma solução mais elegante em que você possa adicionar esse . /etc/.../sourced_script.sh a um script de inicialização para shells não interativos, mas minha experiência com o n00b não sabe se há scripts de inicialização para shells não interativos.

    
por 02.03.2016 / 19:55
0

Isso foi perguntado e respondido muitas vezes em outros lugares, incluindo:

e muitos outros. Eu acho que o primeiro é a melhor resposta que encontrei em alguns segundos olhando

    
por 07.03.2016 / 17:23