env -iとbash-c

env -iとbash-c

誰かが私が2つの違いを理解するのに役立ちますか?

bash -c 'echo $SHELL $HOME $USER'

そして

env -i bash -c 'echo $SHELL $HOME $USER'

何度も試してみましたが、まだわかりません。私はそれに取り組んでおり、envbash -cに表示されます。正確にどんなbash -c役割を果たしますか?

ベストアンサー1

env -i空の環境で指定されたコマンドを実行します。

bash -c …オプションの引数-c( the )を bash フラグメントとして実行します。

bash -c 'echo $SHELL $HOME $USER'bashを実行してもこれらの変数は変更されないため、同じですecho $SHELL $HOME $USER(少なくとも最初に設定されている限り)。

env -i bash -c 'echo $SHELL $HOME $USER'bash-cパラメータとecho $SHELL $HOME $USER空の環境を使用して実行します。 Bashが起動するとSHELL(シェル変数にのみ設定され、bashを起動できるサブルーチン環境にエクスポートされない)など、複数のシェル変数が設定されます。したがって、bashがcommandを解析して拡張するときにecho $SHELL $HOME $USER変数HOMEとはUSER設定されていませんが(bashがこれを行うのかわかりません)SHELLに設定され、コマンドの後に2つのスペースが表示されます。/bin/sh/bin/sh

パラメータの周囲の一重引用符は、引用符bash -c内のテキストが実行中のシェルによって拡張されないようにし、env -i bash -c '…'テキストが変更されずに bash サブプロセスに渡されるようにします。

おすすめ記事