O script de shell que está sendo executado na máquina remota sai após a execução do comando make

2

Estou tentando automatizar a instalação do Erl usando o shell script. Aqui está o meu script de shell -

unzip OTP-18.0-rc1.zip
cd otp-OTP-18.0-rc1

export ERL_TOP='pwd'
./otp_build autoconf
./configure
echo $ERL_TOP
echo "################### MAKE ###################"
make -j8 && make install

echo "Creating soft links......"
ln -snf /home/user/erlang/otp-OTP-18.0-rc1/bin/erl /usr/bin/erl
ln -snf /home/user/erlang/otp-OTP-18.0-rc1/bin/erlc /usr/bin/erlc

# Install other packages

Estou tentando executar esse script em uma máquina remota dessa maneira -

ssh root@host_ip 'bash -s' < my_script.sh 

No entanto, o script sai depois do comando make, sem criar os links suaves. Eu verifiquei que não há erro durante o processo de instalação. Além disso, o script funciona perfeitamente quando executado localmente no mesmo sistema.

Curiosamente, se eu modificar o script para colocar o comando make em duas linhas separadas como esta -

make -j8
make install

O script sai sem fazer make install

O que estou perdendo aqui?

    
por pragmatic 20.10.2015 / 15:40

2 respostas

3

O problema é que você pode ter apenas 1 stdin, e assim, se o seu script bash executar um comando que leia stdin, ele englobará as linhas do script.

Tente redefinir o stdin para os comandos make, por exemplo:

( make -j8 && make install ) </dev/null
    
por 20.10.2015 / 16:12
2

O meuh responde por você, mas aqui está outra opção:

scp my_script.sh root@host_ip:/tmp/
ssh root@host_ip bash /tmp/my_script.sh
    
por 20.10.2015 / 18:15