2013-04-05 6 views
1

SSH를 사용하여 여러 명령을 실행하려고하지만 구문이 올바로 표시되지 않습니다. 누군가 제게 약간의 도움을 주시겠습니까? 그들은 로컬로 실행되는 경우ssh를 통해 여러 명령 실행

ssh "$USER"@"$IP" " \ 
    CURRENT_HOSTNAME=$(hostname); \ 
    sed -c -i 's/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/' $DISTRO_FILE; \ 
    sed -c -i 's/$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/' $CONFIG_FILE; \ 
    hostname $REPLACEMENT_VALUE" 

그 명령은 잘 작동,하지만 난 SSH를 통해 실행하려고 할 때 다음과 같은 오류가 점점 오전 :

sed: -e expression #1, char 0: no previous regular expression 

오류가

sed -c -i 's/$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/' $CONFIG_FILE; \ 
에서 오는 것 같다

SSH 자체에서 이전에 설정 한 $ CURRENT_HOSTNAME을 (를) 읽으려고 시도하기 때문에. 그 변수를 다시 읽는 방법을 모르겠습니다. 어떤 단서를 주시겠습니까?

이 작동
ssh "$USER"@"$IP" "CURRENT_HOSTNAME=\$(hostname); 
    sed -c -i \"s/\($TARGET_KEY *= *\).*/\1$REPLACEMENT_VALUE/\" $DISTRO_FILE; 
    sed -c -i \"s/\$CURRENT_HOSTNAME/$REPLACEMENT_VALUE/\" $CONFIG_FILE; 
    hostname $REPLACEMENT_VALUE" 

:

코드 편집! 고마워요!

감사합니다.

답변

3

큰 따옴표가있는 모든 변수는 매개 변수를 원격 시스템으로 보내기 전에 Bash에 의해 평가됩니다.

$variable을 보존하려면 대신 작은 따옴표를 사용하거나 (명령에서 작은 따옴표 제외) 서버 측에서 평가할 모든 달러 기호를 이스케이프 처리해야합니다.

또한 줄 바꿈을 벗어나 세미콜론을 사용할 필요가 없습니다. 모든 줄 바꿈이 매개 변수에 포함됩니다.

+0

감사합니다. 조나단, 나는 진전을 보였습니다. 나는 지금 그 생각을 이해한다. 로컬 변수 (로컬 bash 스크립트에서), 리모트 변수 (CURRENT_HOSTNAME) 및 sed가 큰 따옴표를 사용하기 때문에 문제가 발생합니다. 위의 코드를 업데이트하고 있습니다. – user1777907

+0

나는 작동하도록 코드를 가지고있다. 고마워, 조나단! – user1777907

관련 문제