在crontab条目中运行命令之前/ bin / zsh -ls%的含义

时间:2017-07-26 10:57:20

标签: shell cron zsh

我正在查看crontab文件并找到以下条目:

30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini

此条目显然会在MyScript.sh中以myConfigFile.ini作为参数执行zsh,但此处-ls %的含义是什么。

1 个答案:

答案 0 :(得分:1)

实际上,尽管它确实执行MyScript.sh myConfigFile.ini,但它并不像它看起来那么明显。

-ls-l -s的简写。这些参数启用了 zsh

中的某些选项
  • -l启用选项LOGIN,该选项告诉 zsh 它是一个登录shell。这也意味着在初始化时会读取~/.zprofile结束/etc/zprofile(或某些系统上的/etc/zsh/zprofile,并在退出时读取~/.zlogout/etc/zlogout
  • -s启用选项SHIN_STDIN。这告诉 zsh STDIN 读取命令,如果没有使用-c COMMAND指定命令且未指定脚本,这也是默认命令。显式设置-s也会禁用从命令行获取脚本。通常被视为文件的任何参数都被视为普通的位置参数(也就是说,在已启动的shell会话中,它们将在数组$@$*以及标量参数中可用{ {1}},$1)。

通常$2会启动 zsh 登录shell,参数zsh -ls % MyScript.sh myConfigFile.ini$1$2设置为$3 ,分别为%MyScript.sh运行myConfigFile.ini并等待来自 STDIN 的输入。

但是这是在crontab中。除非使用MyScript.sh进行转义,否则命令中的%具有特殊含义。第一个\之后的所有内容都将作为标准输入发送到命令。任何进一步的%都将被换行符替换。

结合使用%(或其替身)运行此crontab条目

cron

它作为登录shell启动30 05 * * * /bin/zsh -ls % MyScript.sh myConfigFile.ini ,它将等待 STDIN 上的输入。 zsh然后将cron作为 STDIN 发送到shell。

为什么这样做(而不仅仅是MyScript.sh myConfigFile.ini或者MyScript.sh myConfigFile.ini)很难说没有进一步的信息。记住/path/to/MyScript.sh myConfigFile.ini不一定是 zsh 脚本可能需要花钱购买可能真的是可执行的。因此,MyScript.sh可能需要在MyScript.sh中设置环境。