sudo环境变量

AI-摘要
User GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
sudo环境变量
gogongxt环境变量使用export导出
在当前shell设置环境变量有两种方式:
ABC="123"export ABC="123"
第一种只对当前文件有效,对子shell无效
❌
bash other.sh其实也是开了一个子shell,所以第一种方法对这个无效❌
sudo bash -c "echo $ABC"同理也不行。✅
sudo echo $ABC可以获取,因为$ABC会直接在当前shell展开
第二种对当前shell和子shell都有效,因此以上三种都可以获取到值
因此export可以让环境变量传递下去,当已有变量ABC,想export可以直接export ABC
在当前shell使用sudo执行命令的一些特殊技巧
-E等价于 –preserve-env 保留原来环境变量,如果不指定,则会清空当前用户环境变量。-H等价于 –set-home 设置home为新用户的
所以这两个组合起来用很好用,也就是-EH或者-HE没区别
测试示例帮助理解这两个参数的使用:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#!/bin/bash
set -ex
# 两种不同的变量设置,export才能让子shell获取到变量
# ABC="123"
export ABC="123"
( set +x; echo "====================================" ) 2>/dev/null
echo $HOME
echo $ABC
( set +x; echo "====================================" ) 2>/dev/null
( set +x; echo "====================================" ) 2>/dev/null
# 这里的变量会直接在这里被展开送到sudo,$HOME就不是sudo的home了,而是在执行命令之前的home
# -E 等价于 --preserve-env 保留原来环境变量,如果不指定,则会清空当前用户环境变量。
# -H 等价于 --set-home 设置home为新用户的
sudo echo $HOME
sudo echo $ABC
sudo bash test2.sh
sudo -H echo $HOME
sudo -E echo $HOME
sudo -EH echo $HOME
( set +x; echo "====================================" ) 2>/dev/null
( set +x; echo "====================================" ) 2>/dev/null
sudo -H bash -c 'echo $HOME ; echo $ABC'
sudo -E bash -c 'echo $HOME ; echo $ABC'
sudo -EH bash -c 'echo $HOME ; echo $ABC'
sudo -HE bash -c 'echo $HOME ; echo $ABC'
( set +x; echo "====================================" ) 2>/dev/null
( set +x; echo "====================================" ) 2>/dev/null
sudo -H bash -c 'echo $HOME ; bash test2.sh'
sudo -E bash -c 'echo $HOME ; bash test2.sh'
sudo -EH bash -c 'echo $HOME ; bash test2.sh'
sudo -HE bash -c 'echo $HOME ; bash test2.sh'
( set +x; echo "====================================" ) 2>/dev/null1
2
3
#!/bin/bash
echo "$ABC"第一种执行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
+ ABC=123
====================================
+ echo /Users/gogongxt
/Users/gogongxt
+ echo 123
123
====================================
====================================
+ sudo echo /Users/gogongxt
/Users/gogongxt
+ sudo echo 123
123
+ sudo bash test2.sh
+ sudo -H echo /Users/gogongxt
/Users/gogongxt
+ sudo -E echo /Users/gogongxt
/Users/gogongxt
+ sudo -EH echo /Users/gogongxt
/Users/gogongxt
====================================
====================================
+ sudo -H bash -c 'echo $HOME ; echo $ABC'
/var/root
+ sudo -E bash -c 'echo $HOME ; echo $ABC'
/Users/gogongxt
+ sudo -EH bash -c 'echo $HOME ; echo $ABC'
/var/root
+ sudo -HE bash -c 'echo $HOME ; echo $ABC'
/var/root
====================================
====================================
+ sudo -H bash -c 'echo $HOME ; bash test2.sh'
/var/root
+ sudo -E bash -c 'echo $HOME ; bash test2.sh'
/Users/gogongxt
+ sudo -EH bash -c 'echo $HOME ; bash test2.sh'
/var/root
+ sudo -HE bash -c 'echo $HOME ; bash test2.sh'
/var/root
====================================第二种export执行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
+ export ABC=123
+ ABC=123
====================================
+ echo /Users/gogongxt
/Users/gogongxt
+ echo 123
123
====================================
====================================
+ sudo echo /Users/gogongxt
/Users/gogongxt
+ sudo echo 123
123
+ sudo bash test2.sh
+ sudo -H echo /Users/gogongxt
/Users/gogongxt
+ sudo -E echo /Users/gogongxt
/Users/gogongxt
+ sudo -EH echo /Users/gogongxt
/Users/gogongxt
====================================
====================================
+ sudo -H bash -c 'echo $HOME ; echo $ABC'
/var/root
+ sudo -E bash -c 'echo $HOME ; echo $ABC'
/Users/gogongxt
123
+ sudo -EH bash -c 'echo $HOME ; echo $ABC'
/var/root
123
+ sudo -HE bash -c 'echo $HOME ; echo $ABC'
/var/root
123
====================================
====================================
+ sudo -H bash -c 'echo $HOME ; bash test2.sh'
/var/root
+ sudo -E bash -c 'echo $HOME ; bash test2.sh'
/Users/gogongxt
123
+ sudo -EH bash -c 'echo $HOME ; bash test2.sh'
/var/root
123
+ sudo -HE bash -c 'echo $HOME ; bash test2.sh'
/var/root
123
==================================== 评论
匿名评论隐私政策







