变量没有被回应

2 linux bash

当我在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
Run Code Online (Sandbox Code Playgroud)

我得到的输出是:

UID=1000
UID=0
var1
Run Code Online (Sandbox Code Playgroud)

为什么var2没有导出和回显?我很确定相同的脚本适用于较旧的Bash版本.

var*_*tec 5

  • 如果您首次输入UID == 1000,则输入if子句
  • 你sudo用UID == 0执行脚本; 如果在/ etc/sudoers中设置了env_reset,则sudo 不会保留环境(在大多数发行版中都是默认值).你需要sudo -E来保存环境.
  • 你退出(在回声之前)

从sudo打电话,你进入干净的环境.

  • 你用UID == 0输入
  • 如果没有输入if子句,则不设置var2
  • 你回应变量.