运行 make 命令后,在远程计算机上执行的 Shell 脚本退出

运行 make 命令后,在远程计算机上执行的 Shell 脚本退出

我正在尝试使用 shell 脚本自动安装 Erl。这是我的 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

我正在尝试以这种方式在远程计算机上执行此脚本 -

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

但是,脚本在 make 命令后退出,而不创建软链接。我已经验证安装过程中没有错误。此外,当在同一系统上本地执行时,该脚本运行得非常好。

有趣的是,如果我修改脚本以将make命令放在两个单独的行上,如下所示-

make -j8
make install

脚本退出而不执行任何操作make install

我在这里缺少什么?

答案1

问题是你只能有 1 个标准输入,所以如果你的 bash 脚本运行一个从标准输入读取的命令,它会吞噬脚本中的行。

尝试重置 make 命令的标准输入,例如:

( make -j8 && make install ) </dev/null

答案2

meuh 的答案对你有用,但这里还有另一种选择:

scp my_script.sh root@host_ip:/tmp/
ssh root@host_ip bash /tmp/my_script.sh

相关内容