当前位置: 首页 > 科技观察

你真的知道怎么设置环境变量吗?

时间:2023-03-16 21:38:35 科技观察

很多人知道环境变量,也有很多人使用环境变量。但是很多人一说起在Linux和macOS中使用环境变量,首先想到的就是exportXXX=yyy这种形式的环境变量。但实际上,在Linux和macOS中,定义环境变量的方式有3种,其作用和作用范围也不同。以macOS为例来说明这三个环境变量的区别。我们使用下面的Python程序来验证设置结果:importosname=os.getenv('WHO_AM_I','未找到环境变量')print('环境变量WHO_AM_I的值为:',name)全局环境变量如果你使用ZSH,那么你就会知道ZSH有一个配置文件~/.zshrc。打开后,其内容如下:在这里添加一行代码:exportWHO_AM_I=kingname,可以设置一个全局环境变量。该环境变量将始终生效。即使你关掉电脑再开机,或者任意打开一个新的终端窗口,这个环境变量始终有效。如下图所示:如果你的电脑上没有ZSH,也可以修改系统默认的~/.bashrc文件。只对当前窗口有效的环境变量除了修改配置文件,还可以直接执行命令设置环境变量。这也是最广为人知的方式。我们先删除~/.zshrc中的环境变量,测试一下:可以看到当我们执行exportWHO_AM_I=kingname时,这个环境变量只对当前终端窗口有效。如果重新打开一个新的终端窗口,或者关闭当前窗口再打开,都会失败。仅对当前命令有效的环境变量另外,我们还可以将环境变量设置为仅对当前命令有效,即将定义环境变量的代码直接放在执行的命令之前。并且不添加导出。比如我们要执行命令python3test.py,那么我们就这样做:WHO_AM_I=kingnamepython3test.py运行效果如下图所示:可以看到只有前面有定义语句的那一行该命令可以正确获取环境变量。这种方法在使用Crontab时特别有用。如果你经常使用Crontab,那么你一定知道你的全局环境变量在Crontab中是不会被识别的。无论是在.zshrc文件中还是在.bashrc文件中定义环境变量,通过crontab执行时,程序都无法读取环境变量。这时可以使用这种方法在程序运行时就地定义环境变量:012***cd/job/xxx&&WHO_AM_I=kingnamepython3./test.py这样程序就可以一直获取环境变量正确。