sudo 중에 모든 환경 변수를 보존하는 방법은 무엇입니까?

sudo 중에 모든 환경 변수를 보존하는 방법은 무엇입니까?

sudo -u postgres.을(를) 사용하여 컨테이너 내에서 모든 postgresql 명령을 실행하려고 하는데 sudo.

sudo일부 postgres는 루트로 실행되지 않기 때문에 이 작업을 먼저 수행해야 합니다.

root@473f05e08ea1:/# pg_ctl
pg_ctl: cannot be run as root

그래서 사용sudo -u postgres 여기에 제안된 대로. 직면한 첫 번째 문제는 PATHsudo 이후 env 변수가 다르고 postgres 명령을 찾을 수 없다는 것입니다.

root@473f05e08ea1:/# sudo -u postgres pg_ctl
sudo: pg_ctl: command not found

검색한 후 사용할 수 있습니다.-E 옵션상속하다 PATH:

root@473f05e08ea1:/# sudo -u postgres -E env "PATH=$PATH" pg_ctl
pg_ctl: no operation specified

이것이 나를 궁금하게 만든다:

PGDATA모든 환경 변수( 등 PGOPTIONS포함 ) 를 상속받을 수 있는 방법이 있나요 HOME? 아니면 시행착오를 거쳐 하나씩 물려받아야 하나요?

관련된:

sudo와 su를 통해 실행할 때 PATH 변수가 다른 이유는 무엇입니까?

- 갱신 -

출력은 diff -u <(sudo -E env) <(env)다음과 같습니다

root@2f8a4b93e1da:/# diff -u <(sudo -E env) <(env)
--- /dev/fd/63  2023-03-18 20:36:44.898156660 +0000
+++ /dev/fd/62  2023-03-18 20:36:44.898156660 +0000
@@ -8,12 +8,5 @@
 TERM=xterm
 SHLVL=1
 PGDATA=/var/lib/postgresql/data
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-_=/usr/bin/sudo
-LOGNAME=root
-USER=root
-SHELL=/bin/bash
-SUDO_COMMAND=/usr/bin/env
-SUDO_USER=root
-SUDO_UID=0
-SUDO_GID=0
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/15/bin
+_=/usr/bin/env

답변1

두 번째 명령은

sudo -u postgres -E env "PATH=$PATH" pg_ctl 

정상적으로 운영되고 있습니다.

pg_ctl오류 메시지에서 알 수 있듯이 명령에 대한 옵션을 지정하지 않았습니다 .

이를 명확히 하기 위해,

su -l postgres

그런 다음 명령을 실행하십시오.

/usr/lib/postgresql/15/bin/pg_ctl 

또는

su -l postgres 

그런 다음

export PATH=/usr/lib/postgresql/15/bin:$PATH 

이어서

pg_ctl

같은 이유로 같은 오류가 발생합니다.

pg_ctl사용 중에 사용할 수 있는 옵션에 대한 자세한 내용은 매뉴얼 페이지를 참조하십시오.

관련 정보