linux按顺序运行命令,linux – 安排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文件,而不是替换它的全部内容并在之后删除它,您可以备份原始文件,附加您的命令[包括恢复原始文件的命令]并打开终端.但我认为这不是你的情况(无论如何,如果是的话,我可以用细节扩展这个答案).

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值