
誰かが私が2つの違いを理解するのに役立ちますか?
bash -c 'echo $SHELL $HOME $USER'
そして
env -i bash -c 'echo $SHELL $HOME $USER'
何度も試してみましたが、まだわかりません。私はそれに取り組んでおり、env
例bash -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 サブプロセスに渡されるようにします。