Pipe output to environment variable export command

I'm trying to set a git hash value into an environment variable, i thought it would be as simple as doing this:

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

But the $1 doesn't contain anything. What am I doing wrong?


Solution 1:

$1 is used to access the first argument in a script or a function. It is not used to access output from an earlier command in a pipeline.

You can use command substitution to get the output of the git command into an environment variable like this:

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

However...

This answer is specially in response to the question regarding the Bourne Shell and it is the most widely supported. Your shell (e.g. GNU Bash) will most likely support the $() syntax and so you should also consider Michael Rush's answer.

But some shells, like tcsh, do not support the $() syntax and so if you're writing a shell script to be as bulletproof as possible for the greatest number of systems then you should use the `` syntax despite the limitations.

Solution 2:

Or, you can also do it using $(). (see What is the benefit of using $() instead of backticks shell scripts?)

For example:

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