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

ここでの問題はシェル スクリプトにあるのではなく、セキュリティ上の理由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 に答える