문자열에 큰따옴표 포함

문자열에 큰따옴표 포함

내 명령은

X=`ssh ${OS_USER}@${OS_HOST} ". ~/.kshrc ;
   ulimit -c unlimited ;
   cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf;
   echo "export RC_DB_INSTANCE=$7" >> RC_CONV_SET_VARS"`

$7큰따옴표로 묶어야 합니다. 어떻게 할 수 있나요?

답변1

여러 수준의 중첩된 큰따옴표가 있습니다. 이는 매우 까다롭고 보기 흉하며 읽고 수정하기가 매우 어렵습니다. 예를 들어`

ssh ${OS_USER}@${OS_HOST} \
    ". ~/.kshrc; ... ;
     echo \"export RC_DB_INSTANCE=\\\"\\\$7\\\"\" >> RC_CONV_SET_VARS".

echo(참고: 내 시스템에서 여러 개의 따옴표를 테스트했는데 bash -c작동했지만 에서 작동하는지 100% 확신할 수도 없습니다 ssh. 여러 수준의 따옴표와 백슬래시는 PITA이므로 피해야 합니다.)

그러면 RC_CONV_SET_VARS가 리터럴 파일 이름이 아니라 변수 이름인 경우 상황은 더욱 복잡해집니다. RC_CONV_SET_VARS가 로컬 시스템인지 원격 시스템인지에 따라 더 복잡한 문제가 발생합니다.

원격 호스트로 보내는 간단한 일회성 스크립트를 작성한 scp다음 ssh.

예를 들어:

다음을 다음과 같이 저장합니다 myscript.ksh.

#! /usr/bin/ksh
. ~/.kshrc
ulimit -c unlimited
cd ${OS_PATH}/NEW_BL1_RC_RATE/bin/conf
echo 'export RC_DB_INSTANCE="$7"' >> "$RC_CONV_SET_VARS"

그런 다음 scp원격 호스트로 이동하여 실행합니다.

scp myscript.ksh "${OS_USER}@${OS_HOST}:/tmp/"
ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh'

아직 해결해야 할 몇 가지 참조 문제가 있지만 로컬 시스템에서 실행할 스크립트를 작성할 때와 거의 동일합니다. 여러 수준의 백슬래시 이스케이프 및 인용은 추악하고 복잡하며 혼란스럽지 않습니다.

비밀번호를 여러 번 입력해야 하기 때문에 이것이 실용적이지 않다면 그렇게 하지 마십시오. 키 기반 인증을 설정하고SSH에 비밀번호 기반 인증을 사용하지 마세요.

그런데 명령줄에서 필요한 매개변수를 전달할 수 있습니다 ksh myscript.sh.

ssh "${OS_USER}@${OS_HOST}" 'ksh /tmp/myscript.ksh arg1 arg2 arg3'

또는 7번째 매개변수를 전달해야 하는 경우현지의원격 스크립트에 대한 스크립트:

ssh "${OS_USER}@${OS_HOST}" "ksh /tmp/myscript.ksh \"$7\""

위의 마지막 줄을 myscript.ksh다음과 같이 변경합니다.

echo "export RC_DB_INSTANCE=\"$1\"" >> "$RC_CONV_SET_VARS"

답변2

따옴표를 "이스케이프"해야 합니다.

echo "export RC_DB_INSTANCE=\"$7\""

작동합니다 ...

관련 정보