Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何将shell脚本变量导出到子脚本?_Linux_Bash_Shell_Debian - Fatal编程技术网

Linux 如何将shell脚本变量导出到子脚本?

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

我有一个非常简化的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         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.

否则,如果您只是通过命令行参数传递变量,您将使自己的生活变得更加轻松。

事实上,这就是原因,我忘记了这些安全原因。谢谢