将输出管道传输到环境变量的导出命令

70

我正在尝试将 git 哈希值设置为环境变量,我认为这很简单:

但实际上并不是。以下是我尝试过的方法:

git log --oneline -1 | export GIT_HASH=$1

但是$1没有包含任何内容。我做错了什么?

3个回答

70

$1 用于访问脚本或函数中的第一个参数,而不是用于访问管道中较早命令的输出。

您可以使用命令替换git命令的输出获取到环境变量中,像这样:

GIT_HASH=`git log --oneline -1` && export GIT_HASH

然而...

这个答案是特别针对关于Bourne Shell的问题,并且它是最广泛支持的。你的shell(比如GNU Bash)很可能支持$()语法,因此你也应该考虑Michael Rush的答案。

但是像tcsh这样的一些shell不支持$()语法,所以如果你想编写一个尽可能健壮的脚本适用于最多的系统,那么就应该使用``语法,尽管它有一些限制。


对于那些关心的人,export EMR_CLUSTER_ID_HELPER=\cat /mnt/var/lib/info/job-flow.json | jq -r ".jobFlowId"`` 命令适用于 Amazon EC2-Instance。我刚刚尝试过自己使用,以便将 EMR 集群 ID 放入环境变量中。所以使用``它们运作良好。谢谢 Don Cruickshank。 - Kyle Bridenstine
如果 git log --oneline -1 失败,export GIT_HASH=... 不会失败。 在某些情况下,这可能导致难以发现的错误(例如 CI/CD 流水线执行)。 我建议进行以下修改: GIT_HASH=$(git log --oneline -1) && export GIT_HASH=$GIT_HASH - Paweł Dulęba

51

与JQ兼容 - export USERNAME=$(mlr --c2j --jlistwrap cat ../../creds.csv | jq '.[0] | ."username"') - bananaforscale

2
您可以使用外部文件作为临时变量:
TMPFILE=/var/tmp/mark-unsworth-bashvar-1
git log --oneline -1  >$TMPFILE; export GIT_HASH=$(cat $TMPFILE); rm $TMPFILE
echo GIT_HASH is $GIT_HASH

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接