前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Crontab任务执行脚本source无法获取环境变量

Crontab任务执行脚本source无法获取环境变量

作者头像
skyyws
发布2022-05-20 08:11:29
1.8K0
发布2022-05-20 08:11:29
举报

最近在使用Linux的过程中,需要通过crontab任务启动一个脚本,并且在脚本中需要使用到本地的环境变量。查了很多的网上资料,都说使用“source”或者“.”就可以了,如下所示:

代码语言:javascript
复制
#! /bin/bash
source ~/.bashrc
......

但是,实际执行过程中发现,并没有获取到对应的环境变量。经过好几天排查发现,在.bashrc文件开始的地方发现这样几行代码(不同的Linux系统可能有不同的实现,但都是相同的用处。):

代码语言:javascript
复制
# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

这几行代码的意思是,如果不是用交互式方式执行该文件,则直接退出。默认情况下,用crontab任务启动脚本是关闭该交互式选项的。因此,当使用crontab任务执行脚本时,会直接return,因此不会执行.bashrc之后的代码。有两种办法解决:

  1. 直接注释掉.bashrc中的几行代码。这样做,之后所有的crontab任务都可以直接使用source来获取.bashrc中设置的环境变量,但是可能会对其他地方的产生影响,毕竟.bashrc中设置的环境变量可能会覆盖掉其他的环境变量;
  2. 可以在crontab执行的脚本中,手动设置交互式方式选项为打开状态,如下所示。不过这种方式只对当前脚本有效。 #! /bin/bash set -i source ~/.bashrc ...... PS:通过在命令行输入“shopt”命令,可以看到当前shell的相关配置项。可以通过set命令对这些选项进行设置on/off。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档