期待脚本返回“缺少关闭括号”

时间:2016-10-12 09:07:22

标签: linux bash expect

我写了一个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"

我认为特殊字符的问题。

1 个答案:

答案 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"