sudo中にすべての環境変数を保存する方法は?

sudo中にすべての環境変数を保存する方法は?

sudo -u postgres.を使用してコンテナ内ですべてのpostgresqlコマンドを実行しようとしていますsudo

sudo一部のpostgresはrootとして実行されないため、これを最初に実行する必要があります。

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

2番目のコマンドは

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使用中に使用できるオプションの詳細については、マニュアルページを参照してください。

関連情報