crontab在shell命令中看不到$ 1参数

时间:2018-09-21 23:26:33

标签: bash

我编写了一个小的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

我该如何解决?

1 个答案:

答案 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将获得两个参数foobar,而不是一个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"