管道输入到程序内部命令行的正确方法是什么?

时间:2014-07-27 15:41:09

标签: bash shell unix pipe sqoop2

我正在尝试自动安装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 

但它没有奏效。

2 个答案:

答案 0 :(得分:3)

许多交互式程序从 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

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

答案 1 :(得分:0)

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