web-dev-qa-db-fra.com

Commande d'exportation de sortie de variable vers l'environnement

J'essaie de définir une valeur de hachage git dans une variable d'environnement, je pensais que ce serait aussi simple que de faire ceci:

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

Mais le $1 ne contient rien. Qu'est-ce que je fais mal?

29
Mark Unsworth

$1 Est utilisé pour accéder au premier argument d'un script ou d'une fonction. Il n'est pas utilisé pour accéder à la sortie d'une commande antérieure dans un pipeline.

Vous pouvez utiliser substitution de commande pour obtenir la sortie de la commande git dans une variable d'environnement comme celle-ci:

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

Cependant ...

Cette réponse est spécialement en réponse à la question concernant le Bourne Shell et c'est la plus largement prise en charge. Votre Shell (par exemple GNU Bash) supportera très probablement la syntaxe $() et vous devriez donc également considérer la réponse de Michael Rush.

Mais certains shells, comme tcsh, ne prennent pas en charge la syntaxe $() et donc si vous écrivez un script Shell pour être aussi à l'épreuve des balles que possible pour le plus grand nombre de systèmes, vous devez utiliser la syntaxe `` malgré les limitations.

34
Don Cruickshank

Ou, vous pouvez également le faire en utilisant $ (). (voir Quel est l'avantage d'utiliser $ () au lieu des scripts shell de backticks? )

Par exemple:

export FOO_BACKWARDS=$(echo 'foo' | rev)
19
Michael Rush