"기본" 환경을 사용하여 명령 실행

"기본" 환경을 사용하여 명령 실행

이 문제https://superuser.com/questions/319043/running-a-command-without-inheriting-parents-environment상위 환경을 상속하지 않고 명령을 실행할 수 있는 것이 좋습니다.

$ sudo -u "`whoami`" $COMMAND

을 사용하지 않고 이를 수행할 수 있는 방법이 있습니까 sudo? 매우 인기가 있기 때문에 sudo아직 이식 가능한 상태(또는 POSIX)에 도달하지 못했습니다.

이것을 시도했지만 env -i $COMMAND모든 환경 변수를 제거하므로 제대로 작동하지 않습니다. 내가 원하는 것은 명령을 실행하는 것입니다기본환경.

답변1

login(1)전통적으로 로그인 시 제한된 환경 변수 세트가 설정됩니다. 일반적으로 사용자가 자신으로 로그인한 경우에도 su login비밀번호가 필요하므로 이는 이상적이지 않을 수 있습니다. Unix 시스템은 추가적이거나 다른 복잡성을 가질 수 있습니다. 예를 들어 pam_env(8).sets에 의해 설정된 환경 변수를 추가하거나 제거할 수 있는 PAM이 있는 경우입니다 login. 따라서 사용자가 만드는 복사본은 login(1)PAM 세트를 통한 실제 로그인과 다른 환경 변수 세트를 생성할 수 있습니다.

그런 다음 터미널과 셸이 있습니다. 터미널은 "로그인" 셸로 후속 프로세스를 시작할 수도 있고 그렇지 않을 수도 있습니다. 로그인된 것으로 표시되면 쉘은 다른 파일을 읽을 수 있으며 로그인된 인스턴스와 로그인하지 않은 인스턴스에 대해 서로 다른 환경 변수로 끝날 수 있습니다.이 주제에 관한 기존 문헌이 있습니다..

따라서 유닉스, 로그인 프로세스, 로컬 시스템 구성, 사용자가 사용하는 셸 및 해당 셸의 로컬 구성에 따라 서로 다른 환경 변수가 "기본적으로" 설정될 수 있습니다.

로그인 셸 인스턴스를 통해 적절한 환경 변수 목록을 얻을 수 있습니다.

% export CANARY=tweet
% env -i bash -l -c 'env | grep CANARY'
/Users/jhqdoe/.profile: line 6: set: markdirs: invalid option name
% 

env | grep CANARY이렇게 하면 상위 프로세스( 현재 $COMMAND위치) 에서 환경 변수가 지워집니다 . .profile이것은 실제로 를 위한 것입니다 mksh. 아니요 bash. 그러나 위의 내용은 해당 코드를 거치지 않기 때문에 로그인 워크플로 설정에 필요한 변수를 설정하지 못할 수 있습니다. 새 로그인으로 확인하여 내용을 확인한 후 다음을 실행할 수 있습니다.

$ env > def
$ env -i bash -l -c 'env > new'

def그런 다음 및 파일을 비교하여 new어떻게 다른지 확인하고(아마도 sortand diff명령과 관련하여) 명령을 업데이트하여 env로그인 셸을 실행하기 전에 생략된 내용을 설정할 수 있습니다.

또 다른 아이디어는환경 스냅샷그리고 기본값으로 사용합니다.

관련 정보