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

时间:2014-03-09 20:40:18

标签: sh

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

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

$1不包含任何内容。我做错了什么?

3 个答案:

答案 0 :(得分:33)

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

您可以使用command substitutiongit命令的输出转换为如下环境变量:

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

然而...

此答案专门针对 Bourne Shell 的问题作出回应,并得到最广泛的支持。你的shell(例如GNU Bash)很可能支持$()语法,所以你也应该考虑Michael Rush的答案。

但有些shell(如tcsh)不支持$()语法,所以如果您编写的shell脚本尽可能防止最大数量的系统,那么您应该使用尽管存在限制,但``语法仍然存在。

答案 1 :(得分:18)

或者,您也可以使用$()来完成。 (见What is the benefit of using $() instead of backticks shell scripts?

例如:

export FOO_BACKWARDS=$(echo 'foo' | rev)

答案 2 :(得分:0)

您可以将外部文件用作临时变量:

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