부모 환경을 상속하지 않고 명령 실행


14

새로운 로그인 세션에서 "있는 것처럼"명령을 실행하는 방법이 있습니까?

나는 이미 시도했다 env -i. 그러나 설정하거나 설정 해제 해야하는 다양한 ENV 변수를 다루고 싶지 않습니다.

또한 해봤 bash -c "some command"하고 bash -l -c "some commmand"있지만 현재의 모든 환경을 복사합니다.

내가 가장 가까운 것은 빈민가 솔루션입니다. ssh me@localhost "some command"


/bin/bash --login그 행동을 얻기 위해 사용하십시오 . 예를 들어 적절한 것을 얻기 위해 사용합니다 $PATH.
Daniel Beck

그것은 /bin/bash --l이미 시도한 것과 같습니다 . 원래 환경을 복사합니다. 사용해보십시오 : export SOME_VAL=something. 그런 다음 /bin/bash --login. 그런 다음 env | grep SOME_VAL. 그 가치가있을 것입니다.
dgo.a

답변:


12

다음은 sudo 권한이나 사용자 비밀번호가 필요하지 않지만 여전히 새로운 로그인을 얻는 것과 같은 환경을 제공하는 답변입니다.

env -i HOME="$HOME" bash -l -c 'your_command'

예:

$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123

설명을 위해 이것을 분해 :

  1. env -i HOME="$HOME": 환경을 지 웁니다. -i와 빈 환경 설정 아무런 변수 . 순진하게 실행하려고하면 설정되지 않아서 등을 bash -l로드 하지 .bash_profile않기 때문에 문제 HOME가됩니다. 이를 완화하기 위해을 명시 적으로 전달 HOME="$HOME"하여 HOME(만 HOME설정) 환경을 만듭니다 .

  2. bash -l -c ...: 로그인 쉘에서 원하는 명령을 실행합니다. 깨끗한 환경에서 시작하여 모든 것을 다시로드해야하기 때문에 로그인 쉘이 필요합니다.

특히 :

  • sudo 권한이 필요하지 않습니다 ( sudo버전에 필요).
  • 이것은 사용자의 비밀번호를 입력 할 필요가 없습니다 ( su버전은).
  • SSH 서버를 실행하거나 컴퓨터에 다시 로그인하는 데 사용할 수있는 암호가없는 키가 필요하지 않습니다 ( ssh버전과 동일).

고마워 엘리엇 너무 간단하고 분명해 보였습니다. 이제 나에게 지적되었습니다.
dgo.a 2016 년

12
su -l $USER

sudo -u $USER -i

좀 더 공격적인 시도를 위해 $ HOME 및 $ TERM을 포함한 모든env -i bash 것을 해제합니다 .


2
감사! 두 번째 명령은 내가 원하는 것을 정확하게 제공합니다. 2 시간 이상 검색했는데 답장과 가까운 것을 찾지 못했습니다. 답장을 바탕으로 man sudo"대상 사용자가 호출하는 사용자와 동일한 경우 암호가 필요하지 않습니다." ( su항상 암호를 요구 하는 것 같습니다.) 나는 man페이지 의 첫 번째 단락에서 너무 간단한 것을 간과 한 바보 입니다. 다시!
dgo.a

1
다른 사용자를위한 힌트 ... $USER루트로 로그인 한 다음 sudo -u ...사용자로 로그인해야하는 경우 . 당신이 그냥 sudo -u사용자로 할 경우 상속됩니다.
Adam Gent

sudo액세스 권한 이 없으면 분명히 작동하지 않습니다 . sudo를 필요로하지 않는 대체 방법이 있습니까?
user5359531

@ user5359531 : 예 – su -l $USER.
user1686

1
암호를 묻습니다. ssh 키 인증을 통해 로그인했기 때문에 비밀번호가 무엇인지조차 알지 못합니다. 그리고 암호 프롬프트는 스크립트 기능을 죽일 것입니다. 지금까지의 모습 ssh $USER@localhost <command>은 더 잘 작동합니다.
user5359531
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.