繁体   English   中英

如何将bash的值传递给Expect?

[英]How to pass a value from bash into expect?

我有一个非常简单的bash脚本,需要期望。 我需要将bash的值传递给Expect,并且我不尝试ssh到另一台服务器或其他任何东西(因为我似乎只发现有关通过ssh登录到另一台服务器的问题)。

这个想法就是这样的:

#!/usr/bin/env bash

echo "Please enter your password: "
read PASSWD

x=$(expect -c '
    spawn su -c 'whoami'
    expect "Password:"
    send "$PASSWD\r"
    interact
')

所以这行不通。 Expect Shell无法识别$ PASSWD变量。 如何做到这一点?

谢谢。

shell不会扩展单引号内的变量,这就是为什么在这种情况下$PASSWD仍然是文字字符串$PASSWD

尝试更改引号:

#!/usr/bin/env bash

echo "Please enter your password: "
read PASSWD

x=$(expect -c "
    spawn su -c 'whoami'
    expect 'Password:'
    send '$PASSWD\r'
    interact
")

还有一点注意:您应该意识到这可能会带来安全风险,因为在命令运行时,密码将以纯文本形式显示在进程列表中。

另一个选择是将PASSWD存储在环境中,并期望在那里进行拾取:

read -p "Your password: " passwd
export passwd

expect -c '... ; send "$env(passwd)\r"; ...'

从安全角度考虑,最好的选择是要求输入密码提示:这样,密码将不会在命令行或环境中显示。

expect -c <<'END'
    stty -echo 
    send_user "Your password: " 
    expect_user -re "(.*)\n" 
    send_user "\n" 
    set passwd $expect_out(1,string)
    stty echo 

    # your script starts here
    ...
    send "$passwd\r"
    ...
END

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM