安排脚本作业自动运行但需要用户交互/输入

安排脚本作业自动运行但需要用户交互/输入

我最初为其他事情启动了这个脚本,认为如果脚本能够自动处理整个过程、重新启动并启动更多脚本,那就太好了。然后我意识到我遇到了一个问题,因为我需要运行的另一个进程确实需要用户输入。虽然我已经解决了这个次要问题,所以它不再需要用户输入,但我仍然想知道如何做到这一点。我对 Linux 还很陌生,在过去一个半月里,我一直在用它编写一个进程脚本。然而,还有很多我不知道的东西。

因此,综上所述,我想通过某种方法自动运行脚本。我一直在使用 crontab 和 bash 脚本,但不一定需要 crontab。我通常使用这种方法将脚本从另一个脚本放入 crontab,然后编写主脚本以输出类似于插入的 crontab 作业下面的脚本。

(crontab -l 2>>/dev/null; echo "* * * * * /home/pi/Public/test2") | crontab

我不太关心如何让脚本出现在终端中以供交互,只要我有能力安排何时发生这种情况即可。比如在重启时。

#!/bin/bash
echo 'This is a test.'
echo 'This is a written test.' >> /home/pi/Public/testwrite.txt
sleep 10

是的,我知道这个每分钟都会运行一次,但这只是为了测试目的,以确保它能正常工作。我使用的脚本都在顶部使用“#!/bin/bash”并被赋予执行权限。它在手动启动和在 crontab 中调用时都可以工作,尽管窗口从未出现,而是在后台工作。我希望有一种方法可以强制它进入前台,以便读取或与之交互。

是的,我尝试过用它们在谷歌上搜索各种各样的东西,但我不确定我使用的术语是否正确。我希望至少有人能给我指明正确的方向,如果有人能用这个样本向我展示如何做到这一点,那就锦上添花了。我希望这些信息足够了,我只是需要一个如何让它工作的一般例子。

另外,我找不到可以放在这个问题上的交互式标签,所以如果有人可以做到这一点,那就太好了。:)

编辑01:为了非常清楚,我问的是如何通过 crontab 中的计划脚本使终端出现在桌面上,该脚本运行在 crontab 中调用的脚本。

编辑02:我会发布这些信息,因为这是被要求的,但我喜欢为了挑战而做事,我并不寻求一个非常具体的答案。实际上,知道一个一般性的方法会很好,而不是只知道一些具体的方法。然而,我最初担心的是,我把这句话写成了

sudo openssl req -x509 -newkey rsa:2048 -nodes -keyout /home/drawpileuser/key.pem -out /home/drawpileuser/cert.pem -days 365

编写脚本来为协作绘图程序创建自签名证书。我想让不懂技术的人也能安装 Drawpile,所以我编写了这个超大脚本。不过,后来我能够通过将必要的信息嵌入到生成的脚本中来纠正这个问题

sudo openssl req -x509 -newkey rsa:2048 -nodes -keyout /home/drawpileuser/key.pem -out /home/drawpileuser/cert.pem -days 365 -subj "/C=$country/ST=$state/L=$locality/O=$organization/OU=$unitname/CN=$hostname/emailAddress=$email"

既然我已经这样做了,我现在正在尝试制作一个易于使用的脚本,如何在 Raspbian 上安装 Raspberry Pi 仿真站,它通过执行第一部分来运行这些命令,然后在重新启动后自动运行第二部分。然后它会显示脚本,这样就可以清楚地看到工作正在进行。这里没有什么特别的,只是知道正在发生一些事情。我还假设,也许不正确,某些命令在某些时候将无法在没有用户交互的情况下完成,因此问题只是计时脚本在终端上自行出现。

编辑03&答案:用户gf_能够为我指明正确的方向。通过使用命令lxterminal -e command(来源),我可以让终端打开一个新窗口。但这并不是需要做的全部(来源2)。指定路径而不是依赖 crontab 中的环境变量……我已经在使用,PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin所以我就用了这个。然后创建一个在 crontab 中使用的简单脚本,它会调用另一个脚本。

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
export DISPLAY=:0.0
lxterminal -e /home/pi/Public/./test

Crontab(命令 crontab -e)最终看起来像......

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin
* * * * * /home/pi/Public/test2

这调用了最终的脚本测试。

#!/bin/bash
echo 'This is a test.'
echo 'This is a written test with lxterminal -e for real.' >>     /home/pi/Public/testwrite.txt
sleep 10

答案1

你可以通过以下方式组合多个 bash 命令: { }

如果要向 crontab 添加新任务,则需要结合当前 crontab 配置和新任务配置。之后将此输出作为新配置发送到 crontab:

{crontab -l 2>/dev/null; echo "* * * * * /home/pi/Public/test2"} | crontab -

相关内容