リモートVMのOSバージョンをフェッチし、それを同じvmの環境変数として追加し、さらにフェッチされた値を、expectスクリプトが実行されているホストvmで使用しようとしています。
フェッチした値の値をエクスポートしようとしています。しかし、変数は設定されていません。
send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers`\r"
expect -re $prompt
私は以下の問題を見ています:
can't read "vers": no such variable
while executing
"send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers`\r""
値はリモートVMの変数に設定されており、expectスクリプトで使用できるはずです。
ここにはいくつかの問題があります。まず、変数式expect
と同じ構文を使用することを思い出してくださいsh
。つまり、expect
スクリプトで変数を設定すると、次のようになります。
set somevar "somevalue"
次のコマンドを実行して印刷できます。
puts "$somevar"
これは、このようなコマンドがある場合...
send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers`\r"
...次に、expectは$vers
、接続されたプロセスにそのテキストを送信する前に、変数を展開しようとします。あなたが見ているエラーはから来ていexpect
ます; 次のように再現できます。
expect1.7> puts "$var_that_does_not_exist"
can't read "var_that_does_not_exist": no such variable
次の$
ように、文字列内でをエスケープする必要があります。
send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo \$vers`\r"
これにより、目的のコマンドがシェルに送信されます。
2番目の問題があるのではないかと疑っています。変数vers
を次の出力に設定しています。
rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$' && echo $vers
なぜあなたがecho $vers
最後にそれを持っているのかは明らかではありません。以来$vers
このコマンドを実行するときに設定されていない、それだけで出力に空白行を追加するために起こっています。私はあなたが単純に欲しいと信じています:
send "export vers=`rpm -q --queryformat '%{RELEASE}' rpm | grep -o '.$'`"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加