Mark Unsworth
Mark Unsworth

Reputation: 3177

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?

Upvotes: 72

Views: 73734

Answers (3)

Don Cruickshank
Don Cruickshank

Reputation: 5938

$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:

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

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.

Upvotes: 72

Sohail Si
Sohail Si

Reputation: 2976

You can use an external file as a temporary variable:

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

Upvotes: 2

Michael Rush
Michael Rush

Reputation: 4340

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)

Upvotes: 55

Related Questions