【发布时间】:2016-09-21 10:08:16
【问题描述】:
我在 centOS 中编写了一个简单的 shell 脚本,并从一个 cron 作业中执行它。 我的脚本如下所示:
#!/bin/bash
export PATH=$PATH:$(pwd)
echo $PATH
echo $PATH| mail -s "PATH" me@gmail.com
如果我直接从终端执行这个脚本,它会输出如下:
/sbin:/bin:/usr/sbin:/usr/bin:/vagrant
/vagrant 是我所期望的。
但如果这是从 cron 作业执行的,它会输出(在我的邮件中)如下:
/usr/bin:/bin:/root
从 cron 作业执行时如何正确设置 /vagrant?
更新:我可以将 /vagrant 设置为 PATH,但它只对我有用。如果我将我的脚本部署给其他用户,他们必须创建这个目录。所以我想让脚本像它会从它运行的位置导出位置一样。
在我的例子中,我的脚本从 /vagrant 运行,但当前目录被导出为 /root。这就是问题所在。
更新:遗憾的是,路径已正确导出,但报告找不到 /vagrant 目录中的文件。
【问题讨论】:
-
好吧,通过指定
/vagrant。$(pwd)解析当前工作目录,视情况而定。 -
cron在不同的环境中运行,因此您不能假定与与用户一起运行时相同的值。如果您想添加/vagrant,只需对其进行硬编码。如果要使用变量,请查看Where can I set environment variables that crontab will use? -
另外,你想用什么:当前工作目录(pwd)还是脚本所在的目录?
-
脚本所在目录。