![원격 ssh 명령이 AIX의 ksh 스크립트에서 echo 변수를 보내지 않습니다.](https://linux55.com/image/60343/%EC%9B%90%EA%B2%A9%20ssh%20%EB%AA%85%EB%A0%B9%EC%9D%B4%20AIX%EC%9D%98%20ksh%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20echo%20%EB%B3%80%EC%88%98%EB%A5%BC%20%EB%B3%B4%EB%82%B4%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
SSH를 사용하는 스크립트의 원격 호스트에서 변수 값을 가져와야 하며, 먼저 실행이 끝날 때 변환되는 환경 파일을 가져와야 합니다.
명령은 로컬에서 실행되며 사용되는 것을 볼 수 있습니다 echo
. 나는 이 문제를 조사하는 데 하루를 보냈고 찾을 수 있는 모든 작은따옴표와 큰따옴표 조합을 테스트했습니다. 누군가가 이 문제를 빨리 알아낼 수 있기를 바랍니다.
첫 번째 SSH 명령은 내가 예상한 대로 "YES"를 반환했습니다. 두 번째 변수를 확장하지 않고 원격 호스트로 어떻게 가져올 수 있습니까?
스크립트는 다음과 같습니다.
#!/bin/ksh
set -x
SIDHost=p16
ThisSID=test
ssh -q $SIDHost ". /tmp/useq $ThisSID; echo \$HOST_IS_ERPDB"
ERPTest=`ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"`
스크립트 실행:
+ SIDHost=p16
+ ThisSID=test
+ ssh -q p16 . /usr/vmmc/bin/oracle_scripts/useq test; echo $HOST_IS_ERPDB
YES
+ + ssh -q p16 . /usr/vmmc/bin/oracle_scripts/useq test; echo NO
ERPTest=NO
답변1
백틱 내에서 백슬래시는 다음 문자를 인용합니다. 그래서 당신은 명령의 출력을 얻을 것입니다
ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo $HOST_IS_ERPDB"
당신은 다음을 수행해야합니다 \\
:
ERPTest=`ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \\$HOST_IS_ERPDB"`
따라서 ERPTest
명령의 출력으로 설정됩니다.
ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB"
대안 $(…)
으로 obsolete 대신 사용하십시오 `…`
. 일부 AIX 버전에서는 obsolete 대신 /bin/sh
or 를 사용해야 할 수도 있습니다 .ksh93
/bin/ksh
ERPTest=$(ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB")