Bash脚本命令行参数批处理Stdin(heredocs)

时间:2014-02-25 18:19:58

标签: bash shell stdin

我有一个程序在启动后几秒钟要求stdin。我想从命令行发送stdin而不是手动输入它。我做了以下事情:

./program.sh << EOF
./program.sh <<< EOF
./program.sh << 'input'
./program.sh <<< 'input'

但没有工作。为什么heredocs在这种情况下没有工作?

2 个答案:

答案 0 :(得分:0)

该程序可能认为自己比实际更具交互性,并忽略了未在合适的时间到达的输入。 telnet因此而臭名昭着。选项包括:

  1. 好方法:使用expect以交互方式等待提示并输入回复。

  2. 糟糕的方法:尝试定时回复并希望它有效,

  3. e.g。

    { sleep 5; echo "foo"; sleep 5; } | ./program.sh
    

答案 1 :(得分:0)

<<表示here document

./program.sh <<END
hello
world
END

<<<表示here string

./program.sh <<< "hello world"

如果以某种方式生成输入,请使用管道或从process substitution

重定向
helloWorldGenerator.sh | ./program.sh
./program.sh < <(helloWorldGenerator.sh)