シェルに含まれる期待されるスクリプト:リモートシェルで定義された値を指定するには?

シェルに含まれる期待されるスクリプト:リモートシェルで定義された値を指定するには?

1.問題の説明:

リモートサーバーにSSHを接続し、いくつかのスクリプトを実行するスクリプトがあります。

しかし、リモートサーバーで定義された値を使用しようとすると、いくつかの問題が発生します。

リモートサーバーで定義されている値を参照するために「¥$」を使用しましたが、その値が定義されていないと表示されます。

2. エラーメッセージ:

ここに画像の説明を入力してください。

3. スクリプト:

#!/bin/bash  
myusrname="xxx"
myhost="xxx"
mypsword="xxx"

/usr/bin/expect<<-EOF
spawn ssh -o "StrictHostKeyChecking=no" $myusrname@$myhost
expect "*password*"
send "$mypsword\r"
expect "*#*"
send "tst=\"just a test string\"\r"
expect "*#*"
send "echo \$tst\r"
EOF

答え1

リモートシェルで解釈するには、両方を$tstエスケープする必要があります。expect そしてローカルシェルは、ローカルシェル変数の拡張を可能にするために引用符なしでEOFを使用するためです。$mypassword

だから試してみてください

send "echo \\\$tst\r"

これにより、ローカルシェルのhere-docがおよびを\出力し、次のことを見ること$expectできます。\$tst

答え2

tstこの方法では変数を定義することはできません。見てこの問題

コマンドは bash ではなく TCL スクリプトです。以下を試してください。

set tst "just a test string"
send "echo \$tst\r"

次のコマンドを使用して印刷すると、出力を表示できます。puts

puts $tst

関連情報