【问题标题】:what's the correct way to pipe input to a program's internal command line?将输入管道输入到程序的内部命令行的正确方法是什么?
【发布时间】:2014-07-27 15:41:08
【问题描述】:

我正在尝试自动安装Sqoop 2。假设sqoop-server 安装在IP 地址1.2.3.4 中。 在sqoop-client 上,我想设置该服务器的IP。手动,为此,我会:

sqoop2
sqoop:000> set server --host 1.2.3.4

我如何使用 shell 的 pipeecho 来实现这一点?我试过了

set server --host 1.2.3.4 | sqoop2 

但它并不完全奏效。

【问题讨论】:

  • set 命令集命令行参数$1$2$3 用于管道LHS 上的shell,然后在没有向sqoop2 提供任何输入的情况下退出.这就是它不起作用的原因。

标签: bash shell unix pipe sqoop2


【解决方案1】:

许多交互式程序从 stdin 读取。假设sqoop2 是这种情况,您可能会按照您的建议使用管道。但是您只是忘记使用echo 命令:

echo set server --host 1.2.3.4 | sqoop2

上面的代码将echo的输出设置为sqoop2的输入。 另一种选择是使用here string

sqoop2 <<< "set server --host 1.2.3.4"

第三种选择是使用here doc。如果您必须发送多个命令,这非常有用:

sqoop2 << 'EOF'
set server --host 1.2.3.4
EOF

(在上面,您可以在结束 heredocEOF 标记之前发出任意数量的命令,然后 shell 会将所有命令发送到程序sqoop2 作为其标准输入)

【讨论】:

    【解决方案2】:

    使用expect(1) 编写交互式程序的脚本。

    【讨论】:

      猜你喜欢
      • 2015-04-18
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      • 2019-02-22
      • 1970-01-01
      • 2019-01-30
      • 2011-03-07
      相关资源
      最近更新 更多