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
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?
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
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
Tags bash make shell-script