脚本执行时,如何强制服务bash脚本从stdin读取要求我输入内容?

问题描述

我用systemd创建了一个服务,该服务使用wendy(inotify替换工具)侦听目录并在发生某些更改时运行bash脚本。

但是,我的脚本在特定时间依赖于stdin来读取变量。但是当服务运行时,它会跳过在终端中完全询问我的输入,并继续执行其余的bash脚本。

我是systemd和services的新手,我是否仍然可以强迫它要求我提供输入?

这是/ var / log / syslog中发生的事情

10月7日21:52:09服务器wendy.sh [13062]:已添加到脚本中。

10月7日21:52:09服务器wendy.sh [13062]:输入脚本名称:(/home/user/scripts/blah.sh)

10月7日21:52:09服务器wendy.sh [13062]:chmod:+ x之后缺少操作数

10月7日21:52:09服务器wendy.sh [13062]:尝试使用“ chmod --help”以获取更多信息。

应该问我一个传递给chmod的脚本名。

如何做到这一点?

谢谢

解决方法

不幸的是,由于用户没有连接终端,因此很难在作为后台任务运行的脚本中要求用户输入。我建议您尝试寻找一种替代方法,以从stdin读取输入。

如果您确实想要实现这一目标,则可以例如在某个程序中运行一个可监听UNIX套接字的程序,并且您的自动化脚本可以与该客户端通信以请求输入(参见{this Stack Exchange post)。

对于netcat-openbsd,有-U选项。如果您没有安装,则可能安装了netcat-traditional。我建议切换。

示例命令:nc -U / var / run / socket