リモートVMのOSバージョンを抽出し、それをリモートVMの環境変数として設定し、expectスクリプトでさらに使用するにはどうすればよいですか?

ラビキラン

リモート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スクリプトで使用できるはずです。

larsks

ここにはいくつかの問題があります。まず、変数式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]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ