我有一个程序在启动后几秒钟要求stdin。我想从命令行发送stdin而不是手动输入它。我做了以下事情:
./program.sh << EOF
./program.sh <<< EOF
./program.sh << 'input'
./program.sh <<< 'input'
但没有工作。为什么heredocs在这种情况下没有工作?
答案 0 :(得分:0)
该程序可能认为自己比实际更具交互性,并忽略了未在合适的时间到达的输入。 telnet
因此而臭名昭着。选项包括:
好方法:使用expect
以交互方式等待提示并输入回复。
糟糕的方法:尝试定时回复并希望它有效,
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)