SSHを使用するスクリプトのリモートホストから変数の値を取得する必要があり、最初に実行の最後に変換される環境ファイルをインポートする必要があります。
コマンドはローカルで実行され、使用されていることがわかりますecho
。私はこの問題を調査するために一日を過ごし、見つけることができるすべての一重引用符と二重引用符の組み合わせをテストしました。誰かがこの問題をすばやく把握できることを願っています。
最初のSSHコマンドは、私が期待したように「YES」を返しました。 2番目の変数を拡張せずにリモートホストにどのようにインポートできますか?
スクリプトは次のとおりです。
#!/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")