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)