linux - Cron:从 shell 脚本设置 PATH 不起作用

标签 linux shell path cron

<分区>

我在 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 目录中的文件。

最佳答案

cron 作业在所有者的主目录中运行,因此这就是 pwd 运行时的结果。只需放入您想要的目录即可。

PATH=$PATH:/vagrant

顺便说一下,您不能(可靠地)使用 Bash 语法 export variable=value 因为 Cron 运行纯 sh。无论如何,应该没有必要 export PATH 变量,因为它本来就已经导出了(如果不导出则无法工作)。

关于linux - Cron:从 shell 脚本设置 PATH 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37409429/

相关文章:

linux - 为什么参数-type d在find命令中不生效?

path - LESS 防止 less 添加相对 url

c# - 选择输出目录更改数据库文件路径

linux - 在 Ubuntu Linux 中从 Decklink 4k Extreme 捕获视频的 Ffmpeg 命令

linux - 是否有一种标准方法可以将修改后的 Linux 配置文件分开且可识别?

linux - grep 匹配模式的文件名并 move 到所需的文件夹

shell - 在 fish shell 中压缩 for 循环(循环多个列表)

file - 如何只获取当前可执行文件路径的目录部分?

linux - 恢复 hibernate 分区

php - 带计数的 mysql 汇总