【问题标题】:Cron: Setting PATH from shell script not working [duplicate]Cron:从 shell 脚本设置 PATH 不起作用[重复]
【发布时间】: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 目录中的文件。

【问题讨论】:

标签: linux shell path cron


【解决方案1】:

cron 作业在所有者的主目录中运行,这就是 pwd 在运行时的结果。直接放你想要的目录就好了。

PATH=$PATH:/vagrant

顺便说一句,您不能(可靠地)使用 Bash 语法 export variable=value,因为 Cron 运行普通的 sh。无论如何,应该不需要export PATH 变量,因为它已经被导出,本质上(如果不是它就无法工作)。

【讨论】:

  • cron 可以按照您的要求运行,不是吗?你可以说* * * * * /bin/bash /home/me/script.sh。
  • @fedorqui 你当然是对的;尽管一个可能的错误是如果 OP 没有通过 shebang 运行脚本,或者尽管有 shebang,但仍明确指定 sh。无论如何,我想这现在没有实际意义。
猜你喜欢
  • 1970-01-01
  • 2017-08-15
  • 2017-10-20
  • 2019-05-12
  • 1970-01-01
  • 2018-03-25
  • 2014-10-12
  • 1970-01-01
  • 2021-02-03
相关资源
最近更新 更多