我正在从脚本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
答案 0 :(得分:9)
正如@geekosa所提到的,sudo
出于安全原因重置了环境。
为了保护环境,请将-E
切换为sudo
。
来自sudo
联机帮助页:
-E
-E
(保留环境)选项向安全策略指示用户希望保留其现有的安全策略 环境变量。如果指定了-E
选项且用户没有,则安全策略可能会返回错误 允许保护环境。
答案 1 :(得分:3)
这里的问题不在于shell脚本,而是出于安全原因sudo
清理它传递给它运行的程序的环境。有关详细信息,请参阅man sudoers
;有关系统保留的环境变量(如果有),请参阅系统/etc/sudoers
。
答案 2 :(得分:0)
如果您出于安全或简单的原因只想保留一组特定的变量(而不是所有变量),您只需将它们作为sudo
命令的一部分进行分配:
$ cat test.sh
#!/usr/bin/env bash
echo "$foo"
$ unset foo
$ foo=bar ./test.sh
bar
$ sudo foo=bar ./test.sh
bar