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.