【问题标题】:how to pass command line arguments to shell command in one-line如何在一行中将命令行参数传递给shell命令
【发布时间】:2021-05-26 15:37:53
【问题描述】:

我有一个特定的 shell 命令,它在 ubuntu 终端上运行

所以在终端中运行时,我会这样调用它:

mycommand

在运行时,在终端下,它开始要求一些“提示”(用于配置),我应该把它们录下来,像这样:

然后,另一次与另一次要求“确认”

,然后再进行近 10 次不同的配置确认 我在哪里录制不同的响应

所以我的目的是如何能够一次完成,只用一行命令??

我会试试这个:

mycommand "yes" "yes "no" ..... "yes"

但那是 KO 。

建议??

【问题讨论】:

  • printf "yes\nyes\nno\nyes\n" | mycommand.
  • 一行以上,有一个小脚本文件来回答每一个具体的提示,你可以使用命令:expect

标签: linux bash shell terminal


【解决方案1】:

如果您知道所有必需的输入,您可以创建一个包含答案的文件:

answers.in:

yes
yes
no
yes

然后

mycommand << answers.in

【讨论】:

    【解决方案2】:

    如果 mycommand 是从标准输入而不是从 tty 读取的,那么您可以将响应回显到命令中。这其实是yes命令存在的主要原因之一:

    yes | mycommand
    

    将对所有提示回复“y”。

    yes foo | mycommand
    

    会以“foo”响应所有提示。如果您想对某些人回答“是”而对其他人回答“否”,您可以发挥创造力并执行以下操作:

    yes yes | sed -e 3,5s/yes/no/ -e 10q | mycommand
    

    (上面将对前 2 个提示响应“是”,然后对提示 3 到 5 响应“否”,然后对提示 6 到 10 响应“是”)。

    【讨论】:

      【解决方案3】:

      您可以使用print,正如“@William Pursell”所写。出于习惯,我倾向于使用echo

      $ cat /tmp/x.sh
      #!/bin/sh
      
      read -p "alpha: " alpha
      read -p "beta: "  beta
      read -p "gamma: " gamma
      
      echo "retrieved:"
      echo "\$alpha: $alpha"
      echo "\$beta:  $beta"
      echo "\$gamma: $gamma"
      
      $ echo "a\nb\nc" | /tmp/x.sh
      retrieved:
      $alpha: a
      $beta:  b
      $gamma: c
      

      或者,对我来说更直观:

      $ (echo "a"; echo "multiple words"; echo optional quotes) | /tmp/x.sh
      retrieved:
      $alpha: a
      $beta:  multiple words
      $gamma: optional quotes
      

      而且,正如“@Jean-Loup Sabatier”所提到的。如果您的输入需要根据某些逻辑进行更改,expect 最好添加逻辑,但这是一个不同的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-02
        • 2010-10-30
        • 1970-01-01
        相关资源
        最近更新 更多