Cbh*_*ihe 2 bash cron alias 14.04
一个用户 crontab 条目,内容如下:
0 */4 * * * $HOME/postscript/fprogcache-sync
Run Code Online (Sandbox Code Playgroud)
工作正常。想在 cron-job 上下文中添加一些环境变量,然后我尝试
0 */4 * * * source $HOME/.profile; $HOME/postscript/fprogcache-sync
Run Code Online (Sandbox Code Playgroud)
直到我更改source为.. 错误消息(通过 postfix 邮件发送到 root)是/bin/sh: 1: source: not found,然后确认脚本继续愉快地执行。
我记得曾在某处阅读过在 bash shell中source被定义为内置函数的别名的地方.。如果是这样,它将解释为什么source在 cron 上下文中不被识别。
是这样吗?如果是这样,.定义的系统范围别名在哪里?
是这样吗?如果是这样,
.定义的系统范围别名在哪里?
情况确实如此,但没有系统范围的别名之类的东西。
.并且source在 Bash 中是相同的内置函数,但它是直接在源代码级别定义的(https://askubuntu.com/a/25491/380067)。
同一个内置函数有两个名字的原因很可能在于Bash 的目标是在某种程度上符合 POSIX 标准;所以source为了提供一个助记名并.为了遵守 POSIX 的标准。
source不起作用的真正原因cron是,默认情况下cron,crontab 中的作业在 中执行sh,这是一个符号链接/bin/dash(旨在符合 POSIX 的外壳),它根本没有实现source. 但是它确实实现了..
来自man dash:
. file
The commands in the specified file are read and executed by the
shell.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2444 次 |
| 最近记录: |