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