linux – 安排cron作业打开终端并按顺序运行命令
我在Mac上安排了一个cron作业,每天晚上11点开通终端,如下:
0 23 * * * open -a Terminal 这很棒!但我想要的不仅是打开终端,还要在其中运行一个简单的命令.从在线查看,it looks as if cron commands can be chained with 0 23 * * * open -a Terminal && echo 'Hello,world!' 但是,此修改的cron作业只打开终端而不在那里运行第二个命令.有关如何让cron工作同时做到这两点的任何想法? 解决方法
以下答案[在分隔符之后]假定您要在终端的[内部]内运行第二个命令.否则你只需要交换cronjob上的命令(因为目前,就像你拥有它一样,echo只会在终端退出后执行),例如:
0 23 * * * echo 'Hello,world!' && open -a Terminal 现在,假设您要在新生成的终端中运行命令: 我不知道终端应用程序(来自/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal)接受[ie,解释]任何命令行参数,也不会读取[标准输出重定向到]标准输入的任何内容. 你正在做什么打开-a Terminal&&回声’你好,世界!’基本上是调用终端应用程序,[如果成功]打印’Hello,world!’在调用上一个命令(终端)的同一个shell上.这类似于在同一个shell中执行两个单独的命令,但只在第一个成功时才执行最新的命令. 如果你想在每次为当前用户加载bash(当前是默认的osx shell)时执行一个特定的命令(比如echo’Hello,world!’)(就像每次用户打开终端一样),你可以将该命令添加到?/ .bash_profile.例如: echo "echo 'Hello,world!'" >> ~/.bash_profile 现在当你打开一个终端时,命令`echo’Hello,world!’“将被执行. 由于最新版本的MacOSX默认情况下不包含任何用户的?/ .bash_profile,因此您可以利用此功能并将crontab更改为: 0 23 * * * echo "echo 'Hello,world!' > ~/.bash_profile" && open -a Terminal 这基本上将在每次执行此crontab条目时替换?/ .bash_profile的内容并打开终端. 这样做的缺点是无论你放在?/ .bash_profile中,都将为每个打开的终端执行,无论是来自crontab的终端,还是任何其他用户可以在任何给定时间打开的终端. 要解决此问题,您还可以通过在echo’Hello,world!’之后放置一个尾随的rm -f~ / .bash_profile命令来从中删除?/ .bash_profile文件: 0 23 * * * echo "echo 'Hello,world!'; rm -f ~/.bash_profile" > ~/.bash_profile" && open -a Terminal 这将导致当终端打开并调用bash时,将执行所有?/ .bash_profile命令,包括尾随rm -f~ / .bash_profile,因此下一次调用Terminal不会再次触发你的命令,因为?/ .bash_profile不再存在. 旁注:如果出于某种原因,您已经有了一个?/ .bash_profile文件,而不是替换它的全部内容并在之后删除它,您可以备份原始文件,附加您的命令[包括恢复原始文件的命令]并打开终端.但我认为这不是你的情况(无论如何,如果是的话,我可以用细节扩展这个答案). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |