원격 ssh 명령이 AIX의 ksh 스크립트에서 echo 변수를 보내지 않습니다.

원격 ssh 명령이 AIX의 ksh 스크립트에서 echo 변수를 보내지 않습니다.

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/shor 를 사용해야 할 수도 있습니다 .ksh93/bin/ksh

ERPTest=$(ssh -q ${SIDHost} ". /usr/vmmc/bin/oracle_scripts/useq $ThisSID; echo \$HOST_IS_ERPDB")

관련 정보