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

时间:2017-12-13 18:04:58

标签: 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         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脚本非常缺乏经验。

感谢。

1 个答案:

答案 0 :(得分:1)

出于安全原因,您无法将环境变量“注入”到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.

否则,如果您只是通过命令行参数传递变量,那么您将使自己的生活更多更容易。