Bash 使用expect for密码不起作用,未输入任何内容

Bash 使用expect for密码不起作用,未输入任何内容,bash,shell,expect,heredoc,su,Bash,Shell,Expect,Heredoc,Su,我尝试使用expect在脚本中输入值,其中一些值是密码 Expect没有输入密码,它笨拙地结束了它的子脚本,然后结束了它自己 我将其分解为简单性-尝试改变用户 su - some_random_user ./suscript 其中suscript是: #!/bin/bash expect <<- DONE spawn su - root expect -ex {assword:} send -- "my_password\n" DONE #/bin/ba

我尝试使用expect在脚本中输入值,其中一些值是密码

Expect没有输入密码,它笨拙地结束了它的子脚本,然后结束了它自己

我将其分解为简单性-尝试改变用户

su - some_random_user
./suscript
其中suscript是:

#!/bin/bash

expect <<- DONE
    spawn su - root
    expect -ex {assword:}
    send -- "my_password\n"
DONE
#/bin/bash

expect脚本在子shell中运行,在子shell中登录,然后退出子shell。命令promt不会更改,或者您将看不到输入的任何密码。您期望的是什么?
“我的\u密码\n”
应该是
“我的\u密码\r”
要防止expect在键入密码后立即退出,请在发送密码后添加命令
interact
。将root的密码存储在明文文件中是愚蠢的。你应该改为使用
sudo
进行调查。我不担心这一点,我只是创建一个用户帐户来安装一个软件。Interact返回“spawn id exp0 not open”,但是我肯定是在生成一些东西脚本在子shell中运行,在子shell中登录,然后退出子shell。命令promt不会更改,或者您将看不到输入的任何密码。您期望的是什么?
“我的\u密码\n”
应该是
“我的\u密码\r”
要防止expect在键入密码后立即退出,请在发送密码后添加命令
interact
。将root的密码存储在明文文件中是愚蠢的。你应该改为使用
sudo
进行调查。我不担心这一点,我只是创建一个用户帐户来安装一个软件。Interact返回“spawn id exp0 not open”,但我肯定是在生成一些东西