Quelle est la différence entre la commande
$ env FOO=bar baz
et
$ FOO=bar baz
Quel effet fait env
avez ?
Réponse acceptée :
Ils sont fonctionnellement équivalents.
La principale différence est que env FOO=bar baz
implique l'invocation d'un processus intermédiaire entre le shell et baz
, où comme avec FOO=bar baz
le shell invoque directement baz
.
Donc, à cet égard, FOO=bar baz
est préféré.
Les seules situations dans lesquelles je me trouve en utilisant env FOO=bar
in est l'endroit où je dois passer une commande à une autre commande.
Comme exemple spécifique, disons que j'ai un script wrapper qui effectue quelques modifications de l'environnement, puis appelle exec
sur la commande qui lui a été passée, par exemple :
#!/bin/bash
FOO=bob
some stuff
exec "[email protected]"
Si vous l'exécutez en tant que myscript FOO=bar baz
, le exec
lancera une erreur comme exec FOO=bar baz
n'est pas valide.
Au lieu de cela, vous l'appelez comme myscript env FOO=bar baz
qui est exécuté comme exec env FOO=bar baz
, et est parfaitement valide.