【问题标题】:Need to simulate series of keyboard key events in shell script需要在shell脚本中模拟一系列键盘按键事件
【发布时间】:2017-09-13 08:48:45
【问题描述】:

由于我是 shell 脚本的初学者,对脚本中的模拟键盘按键了解不多。

在我需要运行的一个脚本中,bq init 在此之后它会询问一系列涉及键盘事件的问题,例如在再次按下 yes 之后按下 yes/no 它会询问 yes or no 然后它会要求输入数字喜欢1 or 2

我可以通过运行来管理按下第一个键盘按键事件 echo "y" | big init 但对于以后的问题/键,我一无所知。 任何人都可以帮助解决这个问题....

【问题讨论】:

    标签: shell unix


    【解决方案1】:

    有很多方法可以做到这一点。这种方式可能看起来很直观(“heredoc”):

    yourScript << EOF
    bq init
    yes
    no
    maybe
    1
    2
    EOF
    

    或者这可能会吸引你(“复合声明”):

    { echo "yes"; echo "no"; echo "maybe"; echo "1"; } | yourScript
    

    或者,同样的逐行拼写:

    { 
       echo "yes"
       echo "no"
       echo "maybe"
       echo "1"
    } | yourScript
    

    或者这样printf:

    printf "%s\n" "yes" "no" "maybe" "1" | yourScript
    

    【讨论】:

    • @cdarke 正如荷马辛普森所说,“D'oh”。谢谢 - 我已经改进了。
    • 我为我的另一个脚本尝试了您的解决方案并且它有效。但是对于上面的脚本,我仍然面临这个问题。我们可以在它之间引入一些延迟吗?
    • 当然可以{ echo "yes"; sleep 1; echo "no"; } | yourScript
    【解决方案2】:

    您可以将输入通过管道传输到程序。

    your_program <<< $'yes\nno\nyour_name\n'
    

    您可以从here阅读更多内容

    【讨论】:

      【解决方案3】:

      适合这种工作的工具是expect

      Expect 是一个根据脚本与其他交互式程序“对话”的程序。根据脚本,Expect 知道程序可以预期什么以及正确的响应应该是什么。

      您的脚本可能看起来像这样:

      #!/usr/bin/expect
      
      spawn "./myscript.sh"
      
      expect "First question ?" 
      send "y\r"
      
      expect "Second question ?"
      send "2\r"
      
      interact
      

      这将产生“myscript.sh”,等待它问“第一个问题?”并回复“y”, 然后等待“第二个问题?”并回复“2”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-05-19
        • 2013-05-25
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        相关资源
        最近更新 更多