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

我最初开始使用这个脚本来做其他的事情,认为这个脚本会自动处理整个过程,重启并启动更多的脚本。 然后我意识到我有一个问题,因为我需要运行的另一个进程实际上需要用户input。 虽然我已经解决了第二个问题,所以它不需要用户input,我仍然想知道如何做到这一点。 我对Linux相当陌生,在过去的一个半月里,一直在用脚本编写一个过程。 但是,还有很多我不知道的东西。

所以说,我想通过一些方法自动运行脚本。 我一直在使用crontab和一个bash脚本,但它不一定需要是crontab。 我通常使用这个脚本将脚本放入另一个脚本的crontab中,然后编写主脚本来输出脚本,比如插入的crontab作业下面的脚本。

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

只要我有能力计划何时发生,我就可以不关心如何让脚本出现在terminal中进行交互。 就像重启。

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

是的,我意识到这个每分钟都会发生,但这只是为了testing的目的,以确保它的工作。 我使用的脚本都在顶部使用“#!/ bin / bash”,并赋予执行权限。 它在手动启动时以及在crontab中调用时起作用,尽pipe窗口从不出现,而是在后台运行。 我希望有一种方法能够强迫它进入前台,或者被阅读或相应地进行交互。

是的,我尝试了谷歌search各种各样的东西,使用它们,但我不知道我使用正确的条款来得到它的任何地方。 我希望至less有人能指出我的方向是正确的,如果我真的用这个样本来展示怎么做,那将会是锦上添花。 我希望这是足够的信息,我只是需要一个如何使这项工作的一个通用的例子。

另外,我找不到一个交互式标签来提出这个问题,所以如果有人能做到这一点,那就太棒了。 🙂

编辑01:为了超级清晰,我问如何使一个terminal出现在桌面上,通过crontab中运行crontab中调用的脚本的计划脚本。

编辑02:我会发布这个信息,因为它被要求,但我喜欢做的事情为了挑战的缘故,我不是在寻找一个超级特定的答案。 一般来说,如何才能更好地了解实际情况,而不是仅仅针对这一点。 不过,我最初担心这是我把这条线

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

到脚本中,为协作绘图程序创build一个自签名证书。 我想让非技术精明的人可以安装Drawpile,所以我制作了这个超级大脚本。 尽pipe我已经能够通过将必要的信息embedded到生成的脚本中来纠正这个问题

 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的EmulationStation ,它通过执行第一部分来运行这些命令,然后运行第二部分自动重启后。 然后显示脚本,显然工作正在进行。 这里没什么特别的,只知道发生了什么事情。 我也可能错误地认为,某些时候的一些命令在没有用户交互的情况下将无法完成,因此只能对terminal进行脚本定时。

编辑03&答:用户gf_能够指向我在正确的方向。 通过使用命令lxterminal -e command ( Source ),我可以使terminal打开一个新的窗口。 但是这并不是所有需要做的事情( 来源2 )。 指定path而不是依赖crontab中的环境variables…而我已经在使用PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin所以我就跟着去了 然后创build一个简单的脚本在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 

这就是最后的脚本testing。

 #!/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 

您可以将几个bash命令组合在一起,

如果你想添加一个新的任务到crontab,那么你需要结合当前的crontabconfiguration和新的任务configuration。 之后,将这个输出作为新的configuration发送到crontab:

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