Shell脚本直接工作,但通过crontab出现语法错误

hoo*_*ter 1 shell crontab

我有一个 shell 脚本来自动执行 git 提交并每晚推送:

auto_git_push.sh

#!/bin/sh

function automate(){
    git add .
    git commit -am "automated push $(date +"%Y-%m-%d")"
    git push -u
}

cd ~/htdocs
automate
Run Code Online (Sandbox Code Playgroud)

如果我运行此命令,脚本将按预期工作:. ~/bin/auto_git_push.sh

但是,使用此 crontab 行(设置为每分钟进行测试)

* * * * * sh /home/hookedonwinter/bin/auto_git_push.sh

我收到以下错误:

/home/hookedonwinter/bin/auto_git_push.sh: 3: Syntax error: "(" unexpected

是什么导致了这个语法错误?

谢谢!

根据接受的答案进行编辑:

将脚本更改为:

#!/bin/bash

automate() {
    git add .
    git commit -am "automated push $(date +"%Y-%m-%d")"
    git push -u
}

cd ~/htdocs
automate
Run Code Online (Sandbox Code Playgroud)

以及 crontab 行:

* * * * * /bin/bash /home/hookedonwinter/bin/auto_git_push.sh

jjl*_*lin 5

正如 John 提到的,问题在于你的脚本在两种环境中的解释方式不同(使用/bin/shunder cron,以及使用现有的 shell,这可能是/bin/bash当你直接获取它时)。实际上,/bin/sh通常只是 的符号链接/bin/bash,并且 bash 可执行文件的行为有所不同,具体取决于调用它的名称,但这只是一个题外话。

在这里,解决问题的最简单方法可能就是指定

/bin/bash /home/hookedonwinter/bin/auto_git_push.sh
Run Code Online (Sandbox Code Playgroud)

作为在 cron 下运行的命令。