我编写了一个小的bash脚本,其中添加了一个crontab,该crontab每分钟运行另一个bash脚本,并带有在运行第一个脚本时设置的参数。
因此,这是main.sh
,您可以像./main.sh parameter1
一样运行,它会添加一个crontab;
function cronjobs {
if ! crontab -l | grep "~/runthis.sh"; then
(crontab -l ; echo "* * * * * ~/runthis.sh $1") | crontab -
fi
}
但是,当我检查crontab -e
时似乎没有parameter1
,只有这部分被添加了。 * * * * * ~/runthis.sh
。
我该如何解决?
答案 0 :(得分:0)
您是否已将参数$1
传递给脚本cronjobs
中的函数main.sh
?
我测试了您的代码,它可以正常工作。
文件main.sh
:
#!/bin/bash
function cronjobs {
if ! crontab -l | grep "~/runthis.sh"; then
(crontab -l ; echo "* * * * * ~/runthis.sh $1") | crontab -
fi
}
cronjobs "$1"
# ^^^^ here
运行
./main.sh foobar
您将在crontab -l
* * * * * ~/runthis.sh foobar
更新:
在bash脚本中,除非有特殊原因,否则应对变量使用双引号。
当前脚本,如果我们运行./main.sh "foo bar"
我们会得到
* * * * * ~/runthis.sh foo bar
这意味着脚本~/runthis.sh
将获得两个参数foo
和bar
,而不是一个foo bar
。
如果最后一行是cronjobs $1
,请运行./main.sh "foo bar"
在crontab -l
中,我们将得到:
* * * * * ~/runthis.sh foo
更新脚本main.sh
:
#!/bin/bash
function cronjobs {
if ! crontab -l | grep "~/runthis.sh"; then
(crontab -l ; echo "* * * * * ~/runthis.sh \"$1\"") | crontab -
fi # ^^^^^^^ double quotes
}
cronjobs "$1"
# ^^^^ here
运行
./main.sh "foo bar"
会得到
* * * * * ~/runthis.sh "foo bar"
更新:
如果我们要添加具有不同参数的作业
main.sh
:
#!/bin/bash
function cronjobs {
if ! crontab -l | grep "~/runthis.sh \"$1\"\$"; then
# ^^^^^^^^ also check the parameter
(crontab -l ; echo "* * * * * ~/runthis.sh \"$1\"") | crontab -
fi # ^^^^^^^ double quotes
}
cronjobs "$1"