【问题标题】:"GIT_DIR=myproject.git git init" : What this command line doing on bash?“GIT_DIR=myproject.git git init”:这个命令行在 bash 上做了什么?
【发布时间】:2012-03-25 05:15:09
【问题描述】:

当初始化一个新的 git 仓库时(在 Linux/Ubuntu 上),我们使用:

# What this doing:
GIT_DIR=myproject.git git init  
#The above line will output: Initialized empty Git Repo...

cd myproject.git  
git --bare update-server-info  
cp hooks/post-update.sample hooks/post-update

第一行“GIT_DIR=...”让我很困惑,似乎 bash 会得到一个 env 变量,而 git 使用第一个来初始化新项目,但是如何?谁能解释一下这个小魔法?

【问题讨论】:

  • “如何”是什么意思? shell 语法指定在命令的环境中设置分配。 shell 解析命令行,当它看到分配时,它会在启动命令之前在环境中进行分配。

标签: git bash shell environment-variables


【解决方案1】:

在与 Bourne 兼容的 shell 中,可以在不使用 export 关键字的情况下分配变量。
如果使用前面的程序运行,变量会被导出到环境中
因此在程序中显示为真实的环境变量:

$ VARIABLE=value ./myprogram [arguments]

在有 env 程序的系统上,你可以这样做:

$ env VARIABLE=value ./myprogram [arguments]

【讨论】:

  • 不确定您是否可以说“Unix shell”。 csh 系列的 shell 可能会被视为“Unix shell”类,但它们不识别这种语法。 (csh 是否令人憎恶完全是另一个话题。)
【解决方案2】:

这是 Bash 和其他与 Bourne 兼容的 shell 的一个功能:

VAR=val cmd

运行cmd,将VAR设置为val,否则运行shell本身的环境。

尝试运行以下命令:

printenv
export FOO=bar
printenv | grep '^FOO='
FOO=baz printenv | grep '^FOO='

【讨论】:

  • 这是一个很好且很有启发性的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 2013-08-13
  • 2018-04-19
  • 2018-01-23
  • 1970-01-01
相关资源
最近更新 更多