루트인 경우 다른 사용자의 ~/.bashrc를 가져오고 모든 환경 변수를 가져옵니다.

루트인 경우 다른 사용자의 ~/.bashrc를 가져오고 모든 환경 변수를 가져옵니다.

루트로 실행되는 작은 시스템 응용 프로그램을 개발하려고 합니다. 이 애플리케이션에서는 기본 사용자( $USER애플리케이션을 루트로 실행하는 사용자 가 아닌)에 대한 모든 환경 변수를 나열하려고 합니다 $SUDO_USER. 애플리케이션은 터미널에서 실행되지 않고 Qt 환경에서 C로 열린 프로세스에 의존하기 때문에 먼저 환경을 준비한 다음 해당 하위 프로세스에서 환경 변수를 가져오고 싶습니다.

내가 달성하려는 것은 다음과 같습니다.

  • 루트에서 사용자로 변경
  • 소스 ~/.bashrc 또는 ~/.profile 등
  • printenv [그리고 스크립트 다음에 가져옵니다]
  • 다시 루트로 변경

온라인에서 몇 가지 해결 방법을 찾아서 읽었지만 이러한 해결 방법(다른 사용자로 명령을 실행하는 경우)이 내가 원하는 결과에 도움이 되지 않는다는 것을 알았습니다.

위의 작업을 수행하려면 라인이 필요합니다. 내가 지금 가지고 있는 것은 다음과 같습니다(루트로 실행 중).

sudo -i -u user sh -c '. /home/user/.bashrc && printenv > /tmp/user.env'

일부 환경 변수는 볼 수 있지만 /home/user/.bashrc에서 내보낸 사용자 정의 변수는 볼 수 없습니다.

어떤 안내라도 감사하겠습니다.

정보가 누락된 경우 알려주시기 바랍니다.

감사합니다,

답변1

귀하의 명령을 시도해 보았는데, 검색만 하면 되는 것 같습니다.

sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'

나는 사용했다원천대신 명령.

포함하다 ~/.bashrc:

[ws] root ~ >cat /home/user1/.bashrc 
# .bashrc
...
export TESTENV="test"
...

명령을 실행하고 다음을 표시합니다 /tmp/user.env.

[ws] root ~ >sudo -i -u user1 sh -c 'source ~/.bashrc && printenv > /tmp/user.env'

[ws] root ~ >cat /tmp/user.env 
...
SHELL=/bin/bash
USER=user1
SUDO_COMMAND=/bin/bash -c sh -c source\ ~/.bashrc\ &&\ printenv\ >\ 
...
TESTENV=test
...
[ws] root ~ >

관련 정보