env -i 和 bash-c

env -i 和 bash-c

有人可以帮我理解两者之间的区别吗

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'相当于echo $SHELL $HOME $USER,因为运行 bash 不会修改这些变量(至少只要它们最初设置)。

env -i bash -c 'echo $SHELL $HOME $USER'bash使用参数-cecho $SHELL $HOME $USER以及空环境运行。当 bash 启动时,它会设置一些 shell 变量,包括SHELL(仅设置为 shell 变量,不会导出到 bash 可能启动的任何子程序的环境中)。因此,当 bash 解析和扩展命令时echo $SHELL $HOME $USER,变量HOMEUSER未被设置,但SHELL被设置为/bin/sh(我不知道为什么 bash 这样做),并且该命令显示/bin/sh后跟两个空格。

参数周围的单引号bash -c确保引号内的文本不会被运行的 shell 扩展env -i bash -c '…',以便文本按原样传递到 bash 子进程。

相关内容