Linux 如何将shell脚本变量导出到子脚本?
我有一个非常简化的bash脚本,它调用自身,无法将导出的变量Linux 如何将shell脚本变量导出到子脚本?,linux,bash,shell,debian,Linux,Bash,Shell,Debian,我有一个非常简化的bash脚本,它调用自身,无法将导出的变量id保留到子脚本: 1 #! /bin/bash 2 3 SCRIPT="$(realpath "${0}")" 4 5 echo "start script" 6 echo "euid= $EUID" 7 8 if [ $EUID != 0 ]; then 9 10 export id=$EUID 11 sudo ${SCRIPT} 12
id
保留到子脚本:
1 #! /bin/bash
2
3 SCRIPT="$(realpath "${0}")"
4
5 echo "start script"
6 echo "euid= $EUID"
7
8 if [ $EUID != 0 ]; then
9
10 export id=$EUID
11 sudo ${SCRIPT}
12 exit 0
13 fi
14
15 echo "HERE WE ARE ROOT"
16 echo "euid= $EUID"
17 echo "id= $id"
18
19 exit 0
输出为:
start script
euid= 1000
start script
euid= 0
HERE WE ARE ROOT
euid= 0
id=
常规用户的EUID
是1000,我试图做的是将这个EUID
保存在作为root用户运行的子进程中
id
在子脚本中未绑定
我用一个交互式shell做了一个简单的测试:
$ export var=1
$ /bin/bash
$ echo $var
1
$ var=2
$ echo $var
2
$ exit
$ echo $var
1
这里正确导出了var
,但在另一种情况下没有,区别是什么
我想我遗漏了一些明显的东西,因为我在shell脚本编写方面非常缺乏经验
谢谢。出于安全原因,您不能将环境变量“注入”到sudo会话中。您可以检查您的系统是否支持以下sudo标志:
-E, --preserve-env
Indicates to the security policy that the user wishes to pre‐
serve their existing environment variables. The security
policy may return an error if the user does not have permis‐
sion to preserve the environment.
否则,如果您只是通过命令行参数传递变量,您将使自己的生活变得更加轻松。事实上,这就是原因,我忘记了这些安全原因。谢谢