linux - 如何在脚本执行时强制服务(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。
如何做到这一点?
谢谢
解决方案
不幸的是,在作为后台任务运行的脚本中要求用户输入非常困难,因为它们没有连接终端。我建议您尝试找到从标准输入读取输入的替代方法。
如果您真的想实现这一点,例如,您可以在某个地方运行一个程序来侦听 UNIX 套接字,并且您的自动化脚本可以与该客户端通信以请求输入(参见此 Stack Exchange 帖子)。
对于 netcat-openbsd,有一个 -U 选项。如果你没有它,你可能已经安装了 netcat-traditional;我建议换。
示例命令:nc -U /var/run/socket
推荐阅读
- flutter - Flutter:相邻显示 PDF 页面
- r - 将具有不同列名的多个csv组合成唯一的列名
- validation - 在 NestJS 中覆盖 ValidationPipe 错误消息不起作用
- flutter - 改变滚动控制器颤动的速度
- excel - 如何使用 VBA Selenium 单击隐藏的 Web 元素?
- c++ - 调用结果的复制初始化序列是否被认为是 GCC 和 Clang 的错误?
- c# - 如果找到特定的子字符串,我想在字符串中添加一些 html 标记
- java - 通过 JPA 存储库以双向链表的形式从数据库中检索项目
- java - 构造函数 JDABuilder(AccountType) 已弃用
- reactjs - 如何在反应 js 中使用正则表达式,以便我可以在 firestore 集合名称中使用它