当前位置: 技术问答>linux和unix
程序中如何使用setenv或者export配置环境变量在当前shell生效
来源: 互联网 发布时间:2016-02-20
本文导语: 各位好, 有一个问题一直不甚了了。我写了一个小程序,里面设置了setenv()或者system(export),但是如何让它在当前shell中生效呢。 比如: #include main(){ setenv("PA", "aa",1); } 生成一个 test 可执行文件,运行中是可以读...
各位好,
有一个问题一直不甚了了。我写了一个小程序,里面设置了setenv()或者system(export),但是如何让它在当前shell中生效呢。
比如:
#include
main(){
setenv("PA", "aa",1);
}
生成一个 test 可执行文件,运行中是可以读出环境变量,但是运行完之后,在当前的shell中已经没有这个变量了。
我不是很了解程序运行的原理, 是否每次执行程序,都会新增一个子shell,等退出就没了呢?
有一个问题一直不甚了了。我写了一个小程序,里面设置了setenv()或者system(export),但是如何让它在当前shell中生效呢。
比如:
#include
main(){
setenv("PA", "aa",1);
}
生成一个 test 可执行文件,运行中是可以读出环境变量,但是运行完之后,在当前的shell中已经没有这个变量了。
我不是很了解程序运行的原理, 是否每次执行程序,都会新增一个子shell,等退出就没了呢?
|
程序是当前shell的子进程,在程序中setenv不会影响(也无法影响)到当前shell的环境变量。
|
shell设置环境变量,只对该shell有用,shell退出,环境变量恢复原来样子
|
楼上两位的回答很正确。本质上是因为在shell命令行下执行一个程序是在fork一个进程。子进程不会改变父进程的环境。所以export, setenv,还有C语言的setenv()函数本质上都只会改变当前进程的环境变量。
不过通常解决楼主问题的一个方法是用source命令或. 执行这个脚本,比如 # source xxx.sh或 . xxx.sh,这样脚本里的export命令可以改变当前shell的环境变量。可以试一下。
不过通常解决楼主问题的一个方法是用source命令或. 执行这个脚本,比如 # source xxx.sh或 . xxx.sh,这样脚本里的export命令可以改变当前shell的环境变量。可以试一下。