睡眠后如何使用heredoc发送一些输入?
Posted
技术标签:
【中文标题】睡眠后如何使用heredoc发送一些输入?【英文标题】:How do I send some input with heredoc after a sleep? 【发布时间】:2021-03-23 10:35:42 【问题描述】:我想从一个 shell 脚本运行一个 python 脚本,然后在 5 秒后发送一些输入。
#!/bin/bash
<path/to/python/script> << EOF
input1
EOF
如何让 shell 脚本休眠 5 秒然后发送输入?
【问题讨论】:
我认为您可以使用 bash 命名管道来做到这一点? 这不是一个真正的 python 问题。无论接收什么程序,Stdin 都以相同的方式工作。如果人们同意我们应该删除该标签 你能澄清一下你真正想要做什么吗?为什么要等待 5 秒?谢谢。 sleep 5; echo input; | script.py
有什么问题?
因此,我手动启动了一个 python 脚本,等待大约 5 秒,直到它真正启动,然后输入一些输入。我希望 shell 脚本做同样的事情
【参考方案1】:
您总是可以在 heredoc 中添加 $(sleep 1)
。
$ sed s/world/moon/ <<-eof
> $(date)
> $(sleep 1)\
> $(date)
> hello
> world
> eof
Fri Dec 11 20:51:40 CST 2020
Fri Dec 11 20:51:41 CST 2020
hello
moon
请注意,这不是 bash 等待发送 heredoc,而是 heredoc 需要 1 秒才能呈现。
您也可以让迟到的标准输入接收器本身先于 5 秒睡眠:
$ (date; sleep 1; date; exec sed s/world/moon/) <<-eof
> hello
> world
> again
> eof
Fri Dec 11 20:53:16 CST 2020
Fri Dec 11 20:53:17 CST 2020
hello
moon
again
我认为你的问题有点不寻常。你可能想问一个关于堆栈溢出的不同问题,关于你在等待 5 秒时想要获得什么。也许有更优雅的方法。
【讨论】:
以上是关于睡眠后如何使用heredoc发送一些输入?的主要内容,如果未能解决你的问题,请参考以下文章
使用来自 bash 的标准输入的多行 perl 的 heredoc 语法
如何在 15 秒后从服务中启动处理程序以防止应用程序睡眠并将位置发送到 Web 服务?
如何在powershell中为herestring/heredoc设置编码?