쉘 스크립트를 사용하여 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