テストでは、echo
コマンドライン変数が機能していることがわかりますが、それらを渡したり、エクスポートしたりして、組み込みで使用するにはどうすればよいexpect
ですか?
#!/bin/bash
echo name of script is $0
echo host is $1
echo hostusername is $2
echo hostpassword is $3
expect -c 'spawn ssh -l $2 $1 < ./sf-wall_scp_bash.sh
sleep 2
expect {
"(yes/no)? " {send "yes\n"}
exp_continue
}
expect {
"?assword" {send "$3\r"}
}
sleep 1
'
expect
シバンで呼び出された場合、次のように機能します
#!/usr/bin/expect
set host [lindex $argv 0]
set hostusername [lindex $argv 1]
set hostpassword [lindex $argv 2]
spawn ssh -l $hostusername $host
sleep 2
expect {
"(yes/no)? " {send "yes\n"}
exp_continue
}
expect {
"?assword" {send "$hostpassword\r"}
}
sleep 1
...期待どおりに動作します。スクリプトはbash固有のコマンド、関数、組み込み変数を呼び出す必要があるため、使用bash
して埋め込む必要があります...それ以外の場合は、2番目の例を使用するだけで機能しますが、そうではありません。expect
コマンドライン引数変数を宣言してエクスポートし、上記の最初の例の $1、$2、$3 をそれぞれ宣言およびエクスポートされた変数名に変更してみました。これは、実際に変数を宣言している別のスクリプトで機能しますスクリプト...違いは、それらがコマンドライン引数ではないことです。
host=$1
export host
hostusername=$2
export hostusername
hostpassword=$3
export hostpassword
それらをエクスポートするだけでなく、
export host
export hostusername
export hostpassword
上記の最初の例を試します。変化なし、expect
主張し続ける
「X」を読み取れません: そのような変数はありません
別の bash スクリプトでは、上記の例のように変数を宣言してからエクスポートすることで、変数を正常にエクスポートできました。bash
しかし、コマンドライン引数変数をに渡すことで、そのような幸運を得ることができませんでしたexpect