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のコメントは正しいです。二重引用符ではなく一重引用符が必要です。以下を使用して、ログイン全体をシミュレートするオプションの利点を享受することもできます-l
。su(1)
# sudo su -l deploy -c 'echo $PATH'
答え2
私が試したとき:
$ echo $PATH
/home/bbausch/bin:/home/bbausch/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ sudo sh -c "echo $PATH"
/home/bbausch/bin:/home/bbausch/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
$ sudo sh -c 'echo $PATH'
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
一重引用符に注意してください。これは、シェルがコマンドを呼び出す前に二重引用符で囲まれた文字列で変数拡張を実行するために発生します。ただし、環境変数がファイルでどのように処理されるかを設定できますsudoers
。