我写了一个bash脚本,它从API获取密码并使用“send”来设置此密码
un=admin
pw=$(get_json_value_from_file "$rsm_res_file" "password")
echo $pw
export HISTIGNORE="expect*";
expect -c "
spawn ssh -o UserKnownHostsFile=$ap_known_hosts_file -p $PORT $un@localhost
expect "*ogin*"
send \"$un\r\"
expect "*assword*"
send \"$pw\r\"
interact"
它重新调整了以下异常:
missing close-bracket
while executing "send \"f40T[2[6g%^TsMLv\r\"
interact"
我认为特殊字符的问题。
答案 0 :(得分:1)
您的密码包含[
字符,具有特殊含义。 [...]
中的Tcl/Expect
语法是`...`
中的$(...)
或Bash
中的命令替代。要获得文字[
,您必须使用\[
。对于您的方案,最简单的解决方案是使用env var将密码从Bash
传递到Expect
。 E.g:
PASSWORD=$pw expect -c "
spawn ssh -o UserKnownHostsFile=$ap_known_hosts_file -p $PORT $un@localhost
expect "*ogin*"
send \"$un\r\"
expect "*assword*"
send \$env(PASSWORD)\r
interact"
或
export PASSWORD=$pw
expect -c "
spawn ssh -o UserKnownHostsFile=$ap_known_hosts_file -p $PORT $un@localhost
expect "*ogin*"
send \"$un\r\"
expect "*assword*"
send \$env(PASSWORD)\r
interact"