「デフォルト」環境を使用したコマンドの実行

「デフォルト」環境を使用したコマンドの実行

この問題https://superuser.com/questions/319043/running-a-command-without-inheriting-parents-environment親環境を継承せずにコマンドを実行できることをお勧めします。

$ sudo -u "`whoami`" $COMMAND

を使わずにこれを行う方法はありますかsudo?非常に人気があるため、sudoまだ移植可能な状態(またはPOSIX)に達していません。

これを試してみましたが、env -i $COMMANDすべての環境変数を削除するため、正しく機能しません。私が望むのは、コマンドを実行することです基本環境。

ベストアンサー1

login(1)従来、ログイン時に制限された環境変数セットが設定されていました。通常、ユーザーが自分でログインしてもsu loginパスワードが必要なため、これは理想的ではありません。 Unix システムは、追加の複雑さやその他の複雑さを持つことができます。たとえば、pam_env(8).setsで設定された環境変数を追加または削除できるPAMがあるとしますlogin。したがって、ユーザーが作成したコピーは、login(1)PAMセットを介した実際のログインとは異なる環境変数セットを作成できます。

その後、端末とシェルがあります。端末は、「ログイン」シェルで後続のプロセスを開始することも、そうでない場合もあります。ログインとしてマークされている場合、シェルは別のファイルを読み取ることができ、ログインしているインスタンスとログインしていないインスタンスについて異なる環境変数で終わることがあります。このトピックに関する既存の文献があります。

したがって、Unix、ログインプロセス、ローカルシステム構成、ユーザーが使用するシェル、およびそのシェルのローカル構成によって、異なる環境変数が「デフォルト」に設定されることがあります。

ログインシェルインスタンスを使用すると、適切な環境変数のリストを取得できます。

% export CANARY=tweet
% env -i bash -l -c 'env | grep CANARY'
/Users/jhqdoe/.profile: line 6: set: markdirs: invalid option name
% 

env | grep CANARYこれにより、親プロセス(現在の$COMMAND場所)から環境変数が消去されます。.profileこれは実際のためのものですmksh。いいえbash。ただし、上記はコードを通過しないため、ログインワークフローの設定に必要な変数を設定できない可能性があります。新しいログインで確認して内容を確認したら、以下を実行できます。

$ env > def
$ env -i bash -l -c 'env > new'

defその後、ファイルを比較してどのようにnew異なるかを確認し(おそらくsortanddiffコマンドと一緒に)、コマンドを更新してログインenvシェルを実行する前に省略した内容を設定できます。

もう一つのアイデアは環境スナップショットそしてデフォルトとして使用します。

おすすめ記事