2017-12-13 1 views
0

나는이 아이 스크립트에 내 보낸 변수 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

관련 문제