【问题标题】:Can a shell script interact with the at prompt [duplicate]shell脚本可以与at提示交互吗?
【发布时间】:2019-03-11 10:38:54
【问题描述】:

我想编写一个 shell 脚本来运行调度命令以使用“at”运行。

要调度的命令是一项复杂的网络抓取作业,绝对不能在调度时间之前运行。

如果我的 shell 脚本中有“明天晚上 9 点”,它会打开一个提示符,然后我必须在其中编写命令。通常我会按 ctrl+D 来结束这个提示。

如何编写一个 shell 脚本来自动化这个过程,包括 ctrl+D 命令来完成命令?

我尝试在我的 shell 脚本中写入 EOT 字符,但它不起作用。

我的管道问题:

user@server:~/testing$ ls
user@server:~/testing$ touch TESTFILE | at 9pm tomorrow
warning: commands will be executed using /bin/sh
job 31 at Tue Mar 12 21:00:00 2019
user@server:~/testing$ ls
TESTFILE

【问题讨论】:

  • 谢谢你,三胞胎。我通过搜索找不到那个

标签: bash shell


【解决方案1】:

您可以使用 echo 将命令“touch TESTFILE”传递给 at :

$ echo "touch TESTFILE" | at 12:35
warning: commands will be executed using /bin/sh
job 1 at Mon Mar 11 12:35:00 2019

所以在你更长的例子中:

echo "youtube-dl --username 'USERNAME' --password 'PASSWORD' -o '~/%(playlist)s/%(chapter_number)s - %(chapter)s/%(playlist_index)s - %(title)s.%(ext)s' --min-sleep-interval 30 --max-sleep-interval 60 $1 --playlist" | at $NEXTDATE

【讨论】:

  • 谢谢。我的管道问题是,当我最初运行命令时,它需要很长时间,这意味着它正在立即运行刮擦或以某种方式对其进行评估。我在网上读到,管道左边的东西是立即运行的,并且在设定的日期显示结果。就像我在原帖中所说的那样,我不能在设定的时间之前进行刮擦。
  • @whatscool:monok 提出的解决方案对我来说似乎是正确的,所以如果它不适合你,请展示一个证明它不起作用的最小示例。
  • @whatscool:通过管道传送到“at”的命令在指定时间运行。只有回显会立即运行。您要运行的代码是什么样的? (在我的示例中,它将是“myscript”)。我在上面澄清了我的答案。
  • @monok,我用一个非常基本的管道问题示例编辑了我的原始问题
  • 我也添加了我的脚本
猜你喜欢
  • 1970-01-01
  • 2016-05-29
  • 2023-04-10
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多