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



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

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

但没有一个有效。为什么在这种情况下,heredocs 不起作用?

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

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

  2. 坏方法:尝试计时响应并希望它有效,

例如

{ 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)

相关内容

  • 没有找到相关文章

最新更新