我正在尝试将git哈希值设置为环境变量,我认为这样做很简单:
git log --oneline -1 | export GIT_HASH=$1
但$1
不包含任何内容。我做错了什么?
答案 0 :(得分:33)
$1
用于访问脚本或函数中的第一个参数。它不用于访问管道中早期命令的输出。
您可以使用command substitution将git
命令的输出转换为如下环境变量:
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