makeコマンドを実行すると、リモートコンピュータで実行されたシェルスクリプトが終了します。

makeコマンドを実行すると、リモートコンピュータで実行されたシェルスクリプトが終了します。

シェルスクリプトを使用してErlインストールを自動化しようとしています。これは私のシェルスクリプトです -

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興味深いことに、次のように2つの別々の行にコマンドを入れるようにスクリプトを変更すると、

make -j8
make install

何も実行せずにスクリプトが終了します。make install

私がここで何を見逃しているのでしょうか?

答え1

問題はstdinを1つしか持てないということです。したがって、bashスクリプトがstdinから読み取るコマンドを実行すると、スクリプトの1行を占めます。

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

関連情報