关于Linux:Cron设置路径从shell脚本不工作

Cron: Setting PATH from shell script not working

本问题已经有最佳答案,请猛点这里访问。

我在CentOS中编写了一个简单的shell脚本,并在cron作业中执行这个脚本。我的脚本如下:

1
2
3
4
5
#!/bin/bash

export PATH=$PATH:$(pwd)
echo $PATH
echo $PATH| mail -s"PATH" [email protected]

如果我直接从终端执行这个脚本,它输出如下:

1
/sbin:/bin:/usr/sbin:/usr/bin:/vagrant

哪里是我所期望的。

但是,如果这是从cron作业执行的,它输出(在我的邮件中)如下:

1
/usr/bin:/bin:/root

如何在从cron作业执行时正确设置/移动?

更新:我可以将/vagrant设置为path,但它只对我有用。如果我将脚本部署到其他用户,他们必须创建这个目录。所以我想让脚本像从运行位置导出一样。

在我的例子中,我的脚本是从/vagrant运行的,但是当前目录被导出为/root。这就是问题所在。

更新:遗憾的是,路径导出正确,但报告未找到/vagrant目录中的文件。


cron作业在所有者的主目录中运行,因此当它运行时,pwd就是这样产生的。把你想要的目录放进去。

1
PATH=$PATH:/vagrant

顺便说一下,您不能(可靠地)使用bash语法export variable=value,因为cron运行普通sh。无论如何,不需要使用exportPATH变量,因为它本身就已经被导出了(如果没有,它就不能工作)。