現在、次を使用して別のユーザー アカウントにログインするスクリプトに取り組んでいます。
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"