睡眠后如何使用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发送一些输入?的主要内容,如果未能解决你的问题,请参考以下文章

如何在睡眠模式下唤醒 Android Wear?

使用来自 bash 的标准输入的多行 perl 的 heredoc 语法

如何在 15 秒后从服务中启动处理程序以防止应用程序睡眠并将位置发送到 Web 服务?

如何在powershell中为herestring/heredoc设置编码?

如何使用heredoc在k8s pod yaml定义中创建yaml文件?

使用没有 tty 的 heredoc 在 ssh 后获取 bash 提示