【问题标题】:Simulate user input in bash script [closed]在 bash 脚本中模拟用户输入
【发布时间】:2013-01-18 04:57:39
【问题描述】:

我正在创建自己的 bash 脚本,但我现在卡住了。基本上,该脚本将用于在 CentOS 中自动设置服务器。一些软件通常要求用户输入密码。我希望脚本将我生成并存储为变量的密码而不是询问用户。

当安装过程中出现“新密码:”消息时,如何让脚本将存储在变量 $key 中的值,就像用户使用 bash 脚本键入一样?

【问题讨论】:

    标签: bash input emulation user-input


    【解决方案1】:

    您应该会发现“expect”命令会执行您需要它执行的操作。它广泛可用。

    一个非常粗略的例子:

    #!/usr/bin/expect
    set pass "mysecret"
    
    spawn /usr/bin/passwd
    
    expect "password: "
    send "$pass"
    expect "password: "
    send "$pass"
    

    【讨论】:

    • 是的,我期待很多!
    • dude 这里是“新密码:”在脚本使用 yum 安装东西时出现(例如 mysql}。你能给我看一下这个特殊情况的代码 sn-p。我使用 sed到目前为止,大多数情况下从未使用过期望。从您提供的教程来看,当用户假设输入某些内容时,您似乎可以使用期望
    • 查看#! 行——这是一个Expect 脚本。整个事情由expect 运行,而不是bash,所以它是用Expect 语言(基本上是Tcl)编写的。重要的命令在那里 - spawn 启动您正在与之交互的命令,expect 等待它发送特定字符串,send 发送回复。如果您想将控制权交还给用户,可以使用interact
    • 如果没有 spawn、expect 或 send 怎么办?我们如何使用不需要安装的工具来做到这一点?
    • @user1747935 如果你有expect 命令,那么你有你需要的一切。注意 hashbang #!/usr/bin/expect - 你不应该从 bash shell 运行这个脚本。
    【解决方案2】:

    这是我写的一个sn-p;询问用户密码并将其设置在 /etc/passwd 中。你可以稍微操纵一下它以获得你需要的东西:

    echo -n " Please enter the password for the given user: "
    read userPass
    useradd $userAcct && echo -e "$userPass\n$userPass\n" | passwd $userAcct > /dev/null 2>&1 && echo " User account has been created." || echo " ERR -- User account creation failed!"
    

    【讨论】:

    • 你们误会我的意思了。我不想阅读用户输入。我想做的只是当(yum install something)需要用户输入密码时,它应该放置 在变量 $key 中找到的值作为输入,而不是要求用户输入内容
    • 安装过程中出现“新密码:”提示时,将$key中的值设置为pass
    • 在这方面,只有 expect 才能完成这项工作。例如,当外部程序要求用户输入时,我曾经期望传递一个值。就像当我想将我的 ssh 密钥添加到我的 ssh-agent 时,我会通过 expect 自动将密码短语传递给 ssh-add。
    • 谢谢....也确实期望在设置通行证后已经“刺激”输入按键,否则我必须创建另一个输入命令。
    猜你喜欢
    • 2016-11-18
    • 1970-01-01
    • 2023-03-04
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2019-11-02
    • 1970-01-01
    相关资源
    最近更新 更多