2017-12-13 3 views
0

I持っていた子スクリプトにエクスポート変数idを維持することができない自分自身を呼び出して、この非常に単純化bashスクリプト:シェルスクリプト変数を子スクリプトにエクスポートする方法は?

1 #! /bin/bash 
    2 
    3 SCRIPT="$(realpath "${0}")" 
    4 
    5 echo "start script" 
    6 echo "euid= $EUID" 
    7 
    8 if [ $EUID != 0 ]; then 
    9 
10   export id=$EUID 
11   sudo ${SCRIPT} 
12   exit 0 
13 fi 
14 
15 echo "HERE WE ARE ROOT" 
16 echo "euid= $EUID" 
17 echo "id= $id" 
18 
19 exit 0 

出力は次のようになります。通常のユーザーの

start script 
euid= 1000 
start script 
euid= 0 
HERE WE ARE ROOT 
euid= 0 
id= 

EUID 1000であり、私がしようとしているのは、ルートとして実行されている子プロセスにこのEUIDを保持することです。

idは、子スクリプトではバインドされていません。

だから私は、インタラクティブシェルで簡単なテストを行っている:

$ export var=1 
$ /bin/bash 
$ echo $var 
1 
$ var=2 
$ echo $var 
2 
$ exit 
$ echo $var 
1 

varが正しくここにエクスポートし、それ以外の場合には、違いは何されていませんか?

私はシェルスクリプトでは非常に不慣れなので、私は何かが分かりにくいと思う。

ありがとうございました。

答えて

1

セキュリティ上の理由から、環境変数をsudoセッションに「注入」することはできません。それ以外の場合は

-E, --preserve-env 
      Indicates to the security policy that the user wishes to pre‐ 
      serve their existing environment variables. The security 
      policy may return an error if the user does not have permis‐ 
      sion to preserve the environment. 

あなただけのコマンドライン引数を通じて変数を渡す場合は、自分の人生がずっと簡単になります、:お使いのシステムには、次のsudoフラグをサポートしているかどうかを確認できます。

+0

確かに、それは説明です、私はそれらのセキュリティ上の理由を忘れました。ありがとう。 – Scab

関連する問題