我有一个程序在启动几秒钟后要求 stdin。我想从命令行发送 stdin,而不是手动输入它。我做了以下工作:
./program.sh << EOF
./program.sh <<< EOF
./program.sh << 'input'
./program.sh <<< 'input'
但没有一个有效。为什么在这种情况下,heredocs 不起作用?
该程序可能认为自己比实际情况更具交互性,并忽略了未在正确时间到达的输入。 telnet
为此臭名昭著。选项包括:
-
好方法:使用
expect
以交互方式等待提示并输入响应。 -
坏方法:尝试计时响应并希望它有效,
例如
{ sleep 5; echo "foo"; sleep 5; } | ./program.sh
<<
表示此处文档
./program.sh <<END
hello
world
END
<<<
表示此处字符串
./program.sh <<< "hello world"
如果输入以某种方式生成,请使用管道或从进程替换重定向
helloWorldGenerator.sh | ./program.sh
./program.sh < <(helloWorldGenerator.sh)