通过sudo - 环境变量从另一个shell脚本调用shell脚本?
问题描述:
我从脚本A调用bash脚本B.在脚本A(父脚本)中,我导出了一些变量。我想在脚本B(下标)中使用这些变量,但变量值没有从脚本A传递到脚本B.是否有方法从脚本B访问变量值?通过sudo - 环境变量从另一个shell脚本调用shell脚本?
#!/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
答
正如@geekosaur所述,sudo
出于安全原因重置环境。 为保护环境通-E
切换到sudo
。
从sudo
手册页:
-E
的
-E
(保护环境)选项指示用户希望保留他们现有的 环境变量的安全策略。如果指定了-E
选项并且用户没有 许可权来保留环境,则安全策略可能会返回错误。
答
这里的问题是不是与shell脚本,但出于安全原因sudo
进行消毒它传递给它运行程序的环境。有关详细信息,请参见man sudoers
,系统上将为/etc/sudoers
指定它将保留的环境变量(如果有)。
答
如果你想只保留一组特定的变量(而不是全部)出于安全或简单的原因,你可以简单地指定它们作为sudo
命令的一部分:
$ cat test.sh
#!/usr/bin/env bash
echo "$foo"
$ unset foo
$ foo=bar ./test.sh
bar
$ sudo foo=bar ./test.sh
bar
geekosaur是对的。将-E文件添加到sudo命令将保留环境并将其传递给下标。 – user1325378 2012-04-11 00:54:30