2014-11-20 4 views
0

문제점 : 사용자에게 IP/호스트 이름 & 암호 (둘 다 액세스 할 수 있음)를 묻는 스크립트 세트를 생성하려고 시도 중입니다. & 다음으로 VM에 SSH를 넣으십시오. 두 번째 스크립트는 다양한 업데이트와 서비스로 환경을 기준으로하는 일련의 명령을 실행합니다.Bash 스크립트는 로컬에서 작동하지만 ssh에서는 작동하지 않습니다. 왜 그런가?

로컬로 실행하면이 스크립트가 올바르게 작동합니다. 호스트 이름을 표시하고 확인을 요청하여 해당 환경에서 업데이트를 실행합니다.

is-mbp-jsmith:Setting Up Dev Env's jsmith $ sh baseline.sh 
Are you sure you want to run your script on is-mbp-jsmith.somecompany.com? 
1) yes 
2) no 
#? 1 
Running Script... 

이 스크립트로 일하고 : 여기 -------------------baseline.sh

#!/bin/bash 
#filename: baseline.sh 

echo "Are you sure you want to run your script on $(hostname -f)?" 
OPTIONS="yes no" 
select opt in $OPTIONS; do 
if [ "$opt" = "yes" ]; then 
    echo Running Script... 
    #do script things 
    exit 
elif [ "$opt" = "no" ]; then 
    echo Canceling Run... 
    exit 
else 
    echo Please Input Either the # 1 or 2. 
fi 
done 

는 출력 내 로컬 컴퓨터에서 사용하기 위해

----------------------------------------- --modifyDevEnv.sh

다음은 내가 파이프에 사용하고있는 스크립트입니다. 위의 스크립트를 VM에 추가하십시오. 여기

#!/bin/bash 
#filename: modifyDevEnv.sh 

echo Enter a hostname/IP for the Dev Environment to connect to. 
read HOST 

ssh $HOST -l root 'bash -s' < baseline.sh 

이 스크립트를 실행할 때 내가 얻을 출력 : 즉시 종료 후 두 번 옵션 명령을 실행하고 같은

is-mbp-jsmith:Setting Up Dev Env's jsmith $ sh modifyDevEnv.sh 
Enter a hostname/IP for the Dev Environment to connect to. 
10.58.88.53 
[email protected]'s password: 
Are you sure you want to run your script on vm-jsmith.somecompany.com? 

1) yes 
2) no 
#? 1) yes 
2) no 
#? is-mbp-jsmith:Setting Up Dev Env's jsmith $ 
ssh를 통해 실행

스크립트가 보인다 . 사용자가 예/아니오에 대한 옵션을 입력 할 수 있도록 허용하지 않습니다.

사용자 입력이 인 ssh보다 사용자 입력이 필요하지만이 문제가 저를 괴롭혔습니다. 나는 Bash (내가 시도하고있는 첫 번째 실제 스크립트)에 상당히 익숙하다. 그러나 구문에 잘못된 것이 없다. 제가 누락 된 것이 있습니까?

답변

2

동일한 입력 스트림 (예 : bash -s)과 bash -s (이)가 실행중인 두 개의 다른 프로세스가 있습니다. 스크립트를 원격 컴퓨터에 복사 한 다음 터미널에 연결된 표준 입력으로 실행하는 것이 훨씬 간단합니다.

<이 의미하기 때문에이 문제가 발생
$ cat script 
read -p "Enter name: " name 
echo "Hello $name" 

$ bash script 
Enter name: World 
Hello World 

$ ssh localhost 'bash -s' < script 
Enter name: 
Hello 
Connection to localhost closed. 

"터미널에서이 파일 대신에서 읽기":

#!/bin/bash 
#filename: modifyDevEnv.sh 

echo Enter a hostname/IP for the Dev Environment to connect to. 
read HOST 

scp baseline.sh [email protected]$HOST: 
ssh $HOST -l root basline.sh 
1

다음은 문제를 재생하는 간단한 방법입니다.

는 ssh 명령에 임베딩되는 복사하지 않고 원격으로 로컬 스크립트를 실행하는 가장 간단한 방법이 오히려 무엇이든 오두막의 지정에 비해, 로그인 쉘에서 스크립트를 실행됩니다

$ ssh -t localhost "$(< script)" 
Enter name: World 
Hello World 
Connection to localhost closed. 

주 .

관련 문제