シェル環境で権限のないユーザーとしてスクリプトの一部を実行する

シェル環境で権限のないユーザーとしてスクリプトの一部を実行する

マシンを設定するインスタンス構成スクリプトを作成しています。

sudo ieを介してスクリプトを実行しますsudo run.sh。ほとんどのステップではrootアクセスが必要ですが、スクリプトの一部のステップではそうではないため、sudoを実行する権限のないユーザーとして実行することをお勧めします。

sudoで実行されているスクリプトで次のことを試みます。

sudo -i -u username sh -c 'echo $MY_ENV'

.bashrc含まれているので、export MY_ENV=something上記のコマンドは「何か」を印刷したいと思います。

次のコマンドを実行するためにスクリプト内から一時的に別のユーザーに切り替える方法ユーザーのシェル環境を含みます。

答え1

.bashrcスクリプトではなく対話型シェルによってのみ実行されます。環境変数を定義する場所が正しくありません。バラよりすべてのシェルが読める「.bashrc」に対応するファイルはありますか?そしてUbuntu Wiki

bashに明示的に読み込むように指示できます.bashrc。もちろん、代わりに別のシェルを実行する必要bashがありますsh

sudo -i -u username bash -c '. `~/.bashrc; echo "$MY_ENV"'

.bashrcしかし、これは端末で実行されていると仮定すると、ファイルに内容が含まれる可能性があり、キーバインディング、エイリアス、プロンプトなどを設定するのに時間がかかるため、悪い考えです。

~/.profile合理的な解決策は、環境変数定義を自分が属する場所(または)に置くことです~/.pam_environment

¹何か奇妙な理由でbashが呼び出されない限り。sshd

関連情報