通过sudo从另一个shell脚本调用Shell脚本-环境变量?

4

我正在从脚本A中调用bash脚本B。在父脚本A中,我导出了一些变量。我希望在子脚本B中使用这些变量,但变量值没有传递到脚本B。有没有办法从脚本B中访问这些变量的值?

#!/bin/bash
# script_A.sh
export VAR="value"
enter code here
sudo -u user ./script_B.sh

#!/bin/bash
# script_B.sh
echo $VAR    # this prints nothing
3个回答

9
正如@geekosaur所提到的,sudo为了安全原因重置了环境变量。如果要保留环境变量,请使用-E开关来运行sudo。
从sudo手册中可以看到:
-E 保留环境变量选项表示用户希望保留其现有的环境变量。如果指定了-E选项且用户没有权限保留环境,则安全策略可能会返回错误。

3
这里的问题不在于shell脚本,而是出于安全原因,sudo会清理传递给运行程序的环境变量。请参见man sudoers获取详细信息,并查看您系统上的/etc/sudoers以了解它将保留哪些(如果有)环境变量。

geekosaur 是正确的。在 sudo 命令中添加 -E 文件将保留环境并将其传递给子脚本。 - user1325378

0
如果出于安全或简单起见,您只想保留特定的一组变量而不是所有变量,那么您可以将它们作为 sudo 命令的一部分进行赋值:
$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
$ unset foo
$ foo=bar ./test.sh
bar
$ sudo foo=bar ./test.sh
bar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接