이 문제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
어떻게 다른지 확인하고(아마도 sort
and diff
명령과 관련하여) 명령을 업데이트하여 env
로그인 셸을 실행하기 전에 생략된 내용을 설정할 수 있습니다.
또 다른 아이디어는환경 스냅샷그리고 기본값으로 사용합니다.