4

我正在从脚本 A 调用 bash 脚本 B。在脚本 A(父脚本)中,我正在导出一些变量。我想在脚本 B(下标)中使用这些变量,但变量值没有从脚本 A 传递到脚本 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
4

3 回答 3

9

正如@geekosaur 提到sudo的,出于安全原因重置环境。为了保护环境,请-E切换到sudo.

sudo手册页:

-E

( -Epreserve environment) 选项向安全策略表明用户希望保留他们现有的环境变量。-E如果指定了选项并且用户没有保留环境的权限,则安全策略可能会返回错误。

于 2012-04-11T00:53:31.217 回答
3

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

于 2012-04-11T00:44:39.887 回答
0

如果出于安全或简单的原因只想保留一组特定的变量(而不是所有变量),您可以简单地将它们分配为sudo命令的一部分:

$ cat test.sh 
#!/usr/bin/env bash
echo "$foo"
$ unset foo
$ foo=bar ./test.sh
bar
$ sudo foo=bar ./test.sh
bar
于 2012-04-11T09:37:23.003 回答