当我在Bash 3.2.48中运行以下脚本时:
#!/bin/bash export var1='var1' echo "UID=$UID" if [ x"$UID" != x"0" ] then export var2='var2' while ! { sudo -v; }; do { sudo -v; }; done; sudo $0 exit fi echo $var1 echo $var2 exit 0
我得到的输出是:
UID=1000 UID=0 var1
为什么var2没有导出和回显?我很确定相同的脚本适用于较旧的Bash版本.
如果您首次输入UID == 1000,则输入if子句
你sudo用UID == 0执行脚本; 如果在/ etc/sudoers中设置了env_reset,则sudo 不会保留环境(在大多数发行版中都是默认值).你需要sudo -E来保存环境.
你退出(在回声之前)
从sudo打电话,你进入干净的环境.
你用UID == 0输入
如果没有输入if子句,则不设置var2
你回应变量.