我有一个 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
正如 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 下运行的命令。