マシンを設定するインスタンス構成スクリプトを作成しています。
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