我正在尝试将 git 哈希值设置为环境变量,我认为这很简单:
但实际上并不是。以下是我尝试过的方法:
git log --oneline -1 | export GIT_HASH=$1
但是$1
没有包含任何内容。我做错了什么?
我正在尝试将 git 哈希值设置为环境变量,我认为这很简单:
但实际上并不是。以下是我尝试过的方法:
git log --oneline -1 | export GIT_HASH=$1
但是$1
没有包含任何内容。我做错了什么?
$1
用于访问脚本或函数中的第一个参数,而不是用于访问管道中较早命令的输出。
您可以使用命令替换将git
命令的输出获取到环境变量中,像这样:
GIT_HASH=`git log --oneline -1` && export GIT_HASH
然而...
这个答案是特别针对关于Bourne Shell的问题,并且它是最广泛支持的。你的shell(比如GNU Bash)很可能支持$()
语法,因此你也应该考虑Michael Rush的答案。
但是像tcsh
这样的一些shell不支持$()
语法,所以如果你想编写一个尽可能健壮的脚本适用于最多的系统,那么就应该使用``
语法,尽管它有一些限制。
export USERNAME=$(mlr --c2j --jlistwrap cat ../../creds.csv | jq '.[0] | ."username"')
- bananaforscaleTMPFILE=/var/tmp/mark-unsworth-bashvar-1
git log --oneline -1 >$TMPFILE; export GIT_HASH=$(cat $TMPFILE); rm $TMPFILE
echo GIT_HASH is $GIT_HASH
export EMR_CLUSTER_ID_HELPER=\
cat /mnt/var/lib/info/job-flow.json | jq -r ".jobFlowId"`` 命令适用于 Amazon EC2-Instance。我刚刚尝试过自己使用,以便将 EMR 集群 ID 放入环境变量中。所以使用``它们运作良好。谢谢 Don Cruickshank。 - Kyle Bridenstinegit log --oneline -1
失败,export GIT_HASH=...
不会失败。 在某些情况下,这可能导致难以发现的错误(例如 CI/CD 流水线执行)。 我建议进行以下修改:GIT_HASH=$(git log --oneline -1) && export GIT_HASH=$GIT_HASH
- Paweł Dulęba