문자열 내에 큰따옴표를 포함하려면

문자열 내에 큰따옴표를 포함하려면

내 명령은

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\""

트릭을 할 것입니다 ...

관련 정보