我正在尝试使用 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