首页 > 解决方案 > 在 bash 中的命令之前设置变量

问题描述

有什么区别:

GIT_TRACE=1 git push

GIT_TRACE=1; git push

相同的行为不同,因为第一个在执行时真正输出跟踪信息,git push因为它显然会检查是否设置了此类变量(环境?)。

标签: bashshell

解决方案


GIT_TRACE=1 git push

GIT_TRACE=1被添加到git push命令的环境中。变量赋值仅对该命令有效。它不会影响任何后续命令。

GIT_TRACE=1; git push

一个名为的shell 变量GIT_TRACE设置为1. Shell 变量不同于环境变量。子进程只能看到环境变量。他们看不到 shell 变量。这是一个微妙的区别。正因为如此,git push看不到设置,也没有效果。

此外,与上述不同,该变量在脚本期间继续设置。

要使设置可见,您需要将其导出,将 shell 变量提升为环境变量。

export GIT_TRACE=1; git push

如果您不希望该变量影响任何其他命令,则可以在子 shell 中运行这两个命令。子shell 结束时,子shell 中的变量分配会丢失。

(export GIT_TRACE=1; git push)

当然,你没有理由这样做,因为GIT_TRACE=1 git push它做的事情完全相同但更好(它不会派生子外壳)。


推荐阅读