Dans un shell donné, je dois normalement définir une ou plusieurs variables, puis exécuter une commande. Récemment, j'ai découvert le concept de l'ajout d'une définition de variable à une commande :
FOO=bar somecommand someargs
Cela fonctionne... en quelque sorte. Cela ne fonctionne pas lorsque vous changez une variable LC_* (ce qui semble affecter la commande, mais...). no ses arguments, par exemple, les plages de caractères '[a-z]') ou lorsqu'on envoie la sortie vers une autre commande de cette manière :
FOO=bar somecommand someargs | somecommand2 # somecommand2 is unaware of FOO
Je peux également faire précéder somecommand2 de "FOO=bar", ce qui fonctionne, mais ajoute une duplication indésirable, et n'aide pas avec les arguments qui sont interprétés en fonction de la variable (par exemple, '[a-z]').
Alors, quel est le meilleur moyen de faire cela sur une seule ligne ?
Je pense à quelque chose de l'ordre de :
FOO=bar (somecommand someargs | somecommand2) # Doesn't actually work
J'ai eu beaucoup de bonnes réponses ! L'objectif est de faire en sorte que cela reste une ligne simple, de préférence sans utiliser "export". La méthode utilisant un appel à Bash était la meilleure dans l'ensemble, bien que la version entre parenthèses avec "export" était un peu plus compacte. La méthode consistant à utiliser une redirection plutôt qu'un pipe est également intéressante.
2 votes
(T=$(date) echo $T)
fonctionnera0 votes
Dans le cadre de scripts multiplateformes (y compris Windows) ou de projets basés sur npm (js ou autre), vous pouvez jeter un coup d'œil à l'outil de gestion de l'identité de l'utilisateur. module cross-env .
12 votes
J'espérais que l'une des réponses expliquerait aussi pourquoi cela ne fonctionne qu'en quelque sorte, c'est-à-dire que ce n'est pas équivalent à l'exportation de la variable avant l'appel.
5 votes
Le pourquoi est expliqué ici : stackoverflow.com/questions/13998075/