Você precisaria definir $PATH
no seu arquivo ~/.bashrc
no servidor de destino, no início do arquivo:
export PATH=$PATH:/home/user/bin
link :
Bash in non-interactive mode reads the file ~/.bashrc
Eu tenho um script na máquina remota do servidor Debian e quero executar um comando invocando:
ssh server "find.sh"
Meu script find.sh está em:
/home/user/bin
Primeiro de tudo, eu corri o servidor ssh "echo $ PATH" e ele respondeu com este caminho:
/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Parece que a variável PATH está boa, mas não funciona. A única maneira de fazer isso funcionar foi invocando o caminho completo:
ssh server "/home/user/bin/find.sh"
Existe alguma maneira simples de fazê-lo funcionar sem especificar o caminho completo?
Você precisaria definir $PATH
no seu arquivo ~/.bashrc
no servidor de destino, no início do arquivo:
export PATH=$PATH:/home/user/bin
link :
Bash in non-interactive mode reads the file ~/.bashrc
ssh server "echo $PATH"
não é o mesmo modo de operação que ssh server "find.sh"
. O primeiro contém metacaracteres de shell (especificamente, um espaço) e, portanto, serão executados pelo comando "sh -c especificado" '; o segundo não e, portanto, será executado por "exec ('specified_command')". A diferença é sutil, mas neste caso (porque é o shell que define a variável de ambiente) tem efeitos colaterais que você pode não estar esperando.
Você pode forçar um shell fazendo algo como ssh server 'bash -c "find.sh"'
A digitação de ssh server "echo $PATH"
expandirá PATH
localmente. Portanto, o comando que você está realmente executando é ssh server "echo /home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
e o servidor produzirá a mesma saída toda vez que receber esse comando, independentemente de qual PATH
esteja no lado do servidor. Se você deseja expandir PATH
no lado do servidor, pode usar: ssh server 'echo "$PATH"'
. Observe que aspas simples estão sendo usadas para impedir a expansão local de $PATH
.