現在、次を使用して別のユーザー アカウントにログインするスクリプトに取り組んでいます。
su username -c "comand1; comand2"
sudo
シェルにはコマンドがありません。
ただし、環境変数は変更されません。
たとえば、作業ディレクトリはユーザーごとに異なります。そのため、スクリプトでユーザーが切り替えられると、$HOME
変数には異なる作業ディレクトリが含まれているはずです。
この問題を解決する方法を知っている人はいますか?
現在、次を使用して別のユーザー アカウントにログインするスクリプトに取り組んでいます。
su username -c "comand1; comand2"
sudo
シェルにはコマンドがありません。
ただし、環境変数は変更されません。
たとえば、作業ディレクトリはユーザーごとに異なります。そのため、スクリプトでユーザーが切り替えられると、$HOME
変数には異なる作業ディレクトリが含まれているはずです。
この問題を解決する方法を知っている人はいますか?
ログイン シェルにするためのオプション-l
(または単に)を探している可能性があります。-
のマニュアルを参照してくださいsu(1)
。
2 つの問題があります。
最初: ユーザー"
が引数を区切る場合-c
、この引数のすべては、実行されたシェルではなく、呼び出しシェルによって展開されます。これを防ぐため'
に代わりに使用できます。"
2 番目: デフォルトでsu
は、実際のユーザーのログイン時と同じ手順は実行されません。-l
または-
オプションを使用します。これは、あなたのケースで必要かどうかにかかわらず、試してみてください。
一緒:
> echo $HOME
/root
> su -c "echo $HOME" user -l
/root
> su -c 'echo $HOME' user -l
/home/user
> su -c 'echo $HOME' user
/home/user
ハック的な方法の 1 つenv
は、2 番目のユーザーのすべての変数をファイル ( など.bashrc
) に入れ、コマンドのリストの最初にそれを source することです。
su username -c "source file_name; comand1; comand2"