Comportamento diferente do script localmente e por cima do ssh

1

Eu tenho um script em um servidor-A

Script-A

#!/bin/bash -l
echo "script-A.sh" | change-environment.sh

Quando eu ssh no servidor-A e o executo, ele funciona bem. No entanto, quando eu

ssh user@server-A ./script-A.sh

O Script-A é executado, mas gera um erro de variável indefinido em change-environment.sh.

change-environment.sh é executado no shell c (não tenho controle sobre o script, portanto, o método que usei é a única maneira de usá-lo), mas todo o restante está no bash.

Havia encontrado uma pergunta semelhante em Eu posso rodar um script localmente, mas não posso fazer" ssh HOSTNAME /path/to/script.sh ". No entanto, não havia solução para o problema e tinha um ano de idade.

    
por neorg 01.10.2012 / 11:09

2 respostas

0

Ao usar ssh com um comando, ele pode não criar um shell de login, mesmo que seu script use #!/bin/bash -l .

Teste ssh user@server-A bash -l e execute seu script. Você também pode criar algo como

    #!/bin/bash
    export 

Em seguida, execute-o após efetuar login manualmente ( ssh user@server-A ) e ao usar ssh com um comando ( ssh user@server-A name-of-that-script.sh ).

Por exemplo, no Mac OS X, usar ssh martin@nathan bash -l não define PS1 , enquanto que% normal ssh martin@nathan shell interativo.

Outra diferença importante é que um pseudo-terminal é alocado apenas quando executado de forma interativa (login sem um comando).

    
por 03.10.2012 / 06:49
0

Você realmente precisa comparar seus ambientes, o .profile ajuda você a mantê-los iguais. Por que você não passa por cima do seu código e vê de qual env vars depende? Então você pode consertar estes env vars dentro do seu script-A. A propósito, eu também aconselho você a invocar scripts bash como este durante a depuração:

bash -v

(detalhado)

    
por 01.10.2012 / 12:11