2012-04-11 207 views
3

我從腳本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 

回答

8

正如@geekosaur所述,sudo出於安全原因重置環境。 爲保護環境通-E切換到sudo

sudo手冊頁:

-E

-E(保護環境)選項指示用戶希望保留他們現有的 環境變量的安全策略。如果指定了-E選項並且用戶沒有 許可權來保留環境,則安全策略可能會返回錯誤。

3

這裏的問題是不是與shell腳本,但出於安全原因sudo進行消毒它傳遞給它運行程序的環境。有關詳細信息,請參見man sudoers,系統上將爲/etc/sudoers指定它將保留的環境變量(如果有)。

+0

geekosaur是對的。將-E文件添加到sudo命令將保留環境並將其傳遞給下標。 – user1325378 2012-04-11 00:54:30

0

如果你想只保留一組特定的變量(而不是全部)出於安全或簡單的原因,你可以簡單地指定它們作爲sudo命令的一部分:

$ cat test.sh 
#!/usr/bin/env bash 
echo "$foo" 
$ unset foo 
$ foo=bar ./test.sh 
bar 
$ sudo foo=bar ./test.sh 
bar 
相關問題