首页 > 解决方案 > 如何在脚本执行时强制服务(bash 脚本)从标准输入读取(要求我输入一些内容)?

问题描述

我使用 systemd 创建了一个服务,它使用 wendy(inotify 替换工具)在目录中侦听并在发生变化时运行 bash 脚本。

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

我是 systemd 和服务的新手,无论如何我可以强迫它询问我的输入吗?

这是 /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。

如何做到这一点?

谢谢

标签: linuxbashsystemd

解决方案


不幸的是,在作为后台任务运行的脚本中要求用户输入非常困难,因为它们没有连接终端。我建议您尝试找到从标准输入读取输入的替代方法。

如果您真的想实现这一点,例如,您可以在某个地方运行一个程序来侦听 UNIX 套接字,并且您的自动化脚本可以与该客户端通信以请求输入(参见此 Stack Exchange 帖子)。

对于 netcat-openbsd,有一个 -U 选项。如果你没有它,你可能已经安装了 netcat-traditional;我建议换。

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


推荐阅读