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흥미롭게 도 다음과 같이 두 개의 별도 줄에 명령을 넣도록 스크립트를 수정하면 -

make -j8
make install

어떤 작업도 수행하지 않고 스크립트가 종료됩니다.make install

내가 여기서 무엇을 놓치고 있는 걸까요?

답변1

문제는 stdin을 1개만 가질 수 있다는 것입니다. 따라서 bash 스크립트가 stdin에서 읽는 명령을 실행하면 스크립트의 한 줄을 차지하게 됩니다.

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

관련 정보