以下答案 [在分隔符之后] 假设您要在终端中运行第二个命令 in [inside]。否则,您只需要交换 cronjob 上的命令(因为目前,正如您所拥有的那样,echo 只会在 Terminal 退出后执行),例如:
0 23 * * * echo 'Hello, world!' && open -a Terminal
现在,假设您要在新生成的终端内运行命令:
我不知道Terminal 应用程序(来自/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal)接受[即解释]任何命令行参数,也不会从[重定向到]标准输入的标准输出中读取任何内容。
您对open -a Terminal && echo 'Hello, world!' 所做的基本上是调用Terminal 应用程序和 [如果成功] 在调用上一个命令的同一个shell 上打印'Hello, world!'(Terminal )。这类似于在同一个 shell 中执行两个单独的命令,但只有在第一个成功时才执行最新的命令。
如果您希望每次为当前用户加载 bash(当前默认的 osx shell)时执行特定命令(例如 echo 'Hello, world!')(例如,每次用户打开 Terminal) ,您可以将该命令添加到~/.bash_profile。例如:
echo "echo 'Hello, world!'" >> ~/.bash_profile
现在,当您打开Terminal 时,将执行命令“echo 'Hello, world!'”。
由于 MacOSX 的最新版本默认不包含任何用户的 ~/.bash_profile,因此您可以利用这一点并将您的 crontab 更改为:
0 23 * * * echo "echo 'Hello, world!' > ~/.bash_profile" && open -a Terminal
这基本上将在每次执行此 crontab 条目并打开 Terminal 时替换 ~/.bash_profile 的内容。
这样做的不利之处在于,无论您在~/.bash_profile 中放入的任何内容,都将为每个打开的Terminal 执行,无论是来自 crontab 的那个,还是用户可能在任何给定时间打开的任何其他内容.
要解决此问题,您还可以从其中删除 ~/.bash_profile 文件,方法是在 echo 'Hello, world!' 之后放置一个尾随 rm -f ~/.bash_profile 命令:
0 23 * * * echo "echo 'Hello, world!'; rm -f ~/.bash_profile" > ~/.bash_profile" && open -a Terminal
这将导致当Terminal打开并调用bash时,所有~/.bash_profile命令都会被执行,包括后面的rm -f ~/.bash_profile,所以下一次调用Terminal不会再次触发你的命令因为~/.bash_profile 不再存在。
旁注:如果由于某种原因,您已经有一个~/.bash_profile 文件,而不是替换它的全部内容并在之后删除它,您可以备份原始文件,附加您的命令 [包括恢复原始文件]并打开终端。但我认为这不是你的情况(无论如何,如果是,我可以用细节扩展这个答案)。