[英]how to set bash variable in expect or return variable from expect to bash
[英]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.