他のユーザーのPATH変数を使用したコマンドの実行

他のユーザーのPATH変数を使用したコマンドの実行

Ubuntu 20.04.2 LTS

私が経験している問題は、他のユーザー(sudo /runuser/...)でコマンドを実行することです。ターゲットユーザーの$ PATHを使用してコマンドを実行するためのオプションを設定するオプションセットが見つかりません。この問題を最初に見たのは、Ansibleを介してrakeコマンドを実行することでしたが、「deploy」というユーザーを使用していくつかの簡単なコマンドラインテストに適用しました。

Ubuntuユーザーとしてコマンドを実行する場合:

ubuntu@dev:~$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

ユーザー展開と同じコマンド:

deploy@dev:/home/ubuntu$ echo $PATH
/home/deploy/.yarn/bin:/home/deploy/.config/yarn/global/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#(This is the desired PATH value)

ユーザーとしてデプロイするときは、sudoを使用してコマンドを実行してみてください。

ubuntu@dev:~$ sudo su deploy -c "echo $PATH"
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
#(Wrong $PATH value, it's the path for user ubuntu again)
ubuntu@dev:~$ sudo -u deploy --login echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
(Wrong $PATH value, it's the path for user ubuntu again)

runuserをユーザーとして実行コマンドを配布してみてください。

ubuntu@dev:~$ sudo runuser -l deploy -c 'echo $PATH'
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
#(Wrong $PATH value, not sure which but it's not the PATH of deploy)

"echo $PATH" コマンドは、私が実行したい rake コマンドを置き換えることです。私は他の多くの組み合わせを試しました。すべて失敗し、ほとんどはコマンドを実行するセッションパスを返します。指定されたユーザーがシェルを起動し、ユーザーごとのPATH値があるかのようにコマンドを実行できるコマンドとオプションの組み合わせを知っている人はいますか?

ありがとうございます。

ベストアンサー1

@berndbauschのコメントは正しいです。二重引用符ではなく一重引用符が必要です。以下を使用して、ログイン全体をシミュレートするオプションの利点を享受することもできます-lsu(1)

# sudo su -l deploy -c 'echo $PATH'

おすすめ記事