一. linux中设置环境变量的方式
1.使用/etc/environment, 是一个全局的环境变量设置文件,它会影响到所有用户和所有进程。当你需要设置一个全局的环境变量时,应该使用这个文件。这个文件的格式是 KEY=value,每行一个环境变量。
2. 使用/etc/profile,这是一个 shell 的配置文件,它只会影响到交互式登录 shell。当你需要设置一个只对交互式 shell 有效的环境变量时,应该使用这个文件。这个文件可以包含 shell 命令,例如设置环境变量、定义别名等。
3. 使用~/.bashrc,与/etc/profile类似,它只影响交互式登录shell。与/etc/profile的区别是~/.bashrc只对当前用户的交互shell 生效。
二. 环境变量设置的测试
1. 使用/etc/profile设置环境变量
# 设置环境变量
root@ubuntu16.04:~# vim /etc/profile
export testkey=testvalue
# 登录服务器
ssh ubuntu16.04
# 显示环境变量
root@ubuntu16.04::~# env |grep test
testkey=testvalue
# 在当前shell中,启动一个进程也能读取/etc/profile设置的环境变量,因为子进程共享父进程的环境信息
# 写一个读取环境变量的脚本
root@ubuntu16.04:~# vim getenv.sh
#!/bin/bash
env
root@ubuntu16.04:~#bash -x getenv.sh
#!/bin/bash
env
root@ubuntu16.04:~# bash -x getenv.sh |grep test
+ env
testkey=testvalue
# 用go语言启动一个进程,同样能读取/etc/profile设置的环境变量
root@ubuntu16.04:~# vim getEnvBygo.go
package main
import(
"fmt"
"os"
)
func main(){
path,ok := os.LookupEnv("testkey")
if !ok {
fmt.Println("read env error.")
return
}
fmt.Println("testkey="+path)
}
root@ubuntu16.04:~# go run getEnvBygo.go
testkey=testvalue
注意: ssh xxx '<命令>' ,远程执行命令方式,由于是非shell交互方式,所以无法读取/etc/profile中设置的环境变量
2. 使用/etc/environment
由于/etc/environment设置的环境变量是全局的环境变量,即使使用ssh xxx '<命令>'非交互方式启动进程也能读取到/etc/environment设置的环境变量
vim /etc/environment
# 添加内容
testkey2='testvalue2'
能可以读取环境变量:
修改下读取环境的go脚本
root@ubuntu16.04:~# cat getEnvBygo.go
package main
import(
"fmt"
"os"
)
func main(){
path,ok := os.LookupEnv("testkey")
if !ok {
fmt.Println("testkey read env error.")
}
fmt.Println("testkey="+path)
path,ok = os.LookupEnv("testkey2")
if !ok {
fmt.Println("testkey2 read env error.")
}
fmt.Println("testkey2="+path)
}