为什么 crontab 作业中的命令替换不起作用?

为什么 crontab 作业中的命令替换不起作用?

crontab-l:

* * * * * /Users/michel/Desktop/myScript.sh

我的脚本.sh:

#!/bin/bash
/usr/local/bin/growlnotify -t 'Fact' -m "$(/Users/michel/Desktop/anotherScript.sh data.txt)" -n 'myApp'

它没有显示错误,但是 growlnotify 的消息是空的,所以"$(/Users/michel/Desktop/anotherScript.sh data.txt)"不起作用。

但如果我手动/usr/local/bin/growlnotify -t 'Fact' -m "$(/Users/michel/Desktop/anotherScript.sh data.txt)" -n 'myApp'从 bash 执行,它会按计划工作。

答案1

调用的 Shell 脚本cron是非登录、非交互式 Shell,这意味着它们是在一种极其精简的环境中调用的,并且它们不提供任何典型的 Shell 启动脚本(.profile.bashrc等)。

我猜这anotherScript.sh依赖于此模式下默认情况下不可用的某些内容。例如在通常的登录或交互式 shell 启动文件中定义的某些内容,但这些内容没有被引用。

请参阅bash的(优秀)手册页,了解可以调用的不同方式bash,以及在每种情况下它会寻找哪些启动文件。

相关内容