2

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

su username -c "comand1; comand2" 

sudoシェルにはコマンドがありません。

ただし、環境変数は変更されません。

たとえば、作業ディレクトリはユーザーごとに異なります。そのため、スクリプトでユーザーが切り替えられると、$HOME変数には異なる作業ディレクトリが含まれているはずです。

この問題を解決する方法を知っている人はいますか?

4

3 に答える 3

3

ログイン シェルにするためのオプション-l(または単に)を探している可能性があります。-のマニュアルを参照してくださいsu(1)

于 2012-09-19T21:26:22.667 に答える
0

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
于 2012-09-23T11:03:04.117 に答える
0

ハック的な方法の 1 つenvは、2 番目のユーザーのすべての変数をファイル ( など.bashrc) に入れ、コマンドのリストの最初にそれを source することです。

su username -c "source file_name; comand1; comand2" 
于 2012-09-19T21:28:58.007 に答える