Je sais que je peux exécuter une commande avec une variable d'environnement comme celle-ci:
FOO=bar mycommand
Je sais que je peux exécuter des commandes dans un sous-vase comme ceci:
(firstcommand && secondcommand)
Mais puis-je combiner ces deux?
FOO=bar (firstcommand && secondcommand)
donne:
sh: syntax error: unexpected "("
au moins dans Shellbox Shell (Ash).
éditer : Kusalananda suggérée FOO=bar sh -c 'first && second'
qui est en effet une solution. Cependant, je suis également intéressé par des réponses alternatives, car j'aime la syntaxe des sous-espaces, car elle ne nécessite pas de violer avec échappement de citations.
Une manière:
FOO=bar sh -c 'first && second'
Ceci définit la variable d'environnement FOO
pour la commande unique sh
.
Pour définir plusieurs variables d'environnement:
FOO=bar BAZ=quux sh -c 'first && second'
Une autre façon de faire ceci est de créer la variable et export
it à l'intérieur d'un sous-vase. Faire le export
à l'intérieur du sous-groupe garantit que la coque extérieure n'obtient pas la variable dans son environnement:
( export FOO=bar; first && second )
Résumation des commentaires: le export
est nécessaire pour créer une variable d'environnement (par opposition à une variable de coquille). La chose avec les variables d'environnement est qu'ils sont hérités par les processus d'enfants. Si first
et second
sont des utilitaires externes (ou des scripts) qui regardent leur environnement, ils ne verraient pas la variable FOO
sans le export
.