¿Cuál es la diferencia entre el comando
$ env FOO=bar baz
y
$ FOO=bar baz
¿Qué efecto tiene env
tienes?
Respuesta aceptada:
Son funcionalmente equivalentes.
La principal diferencia es que env FOO=bar baz
implica invocar un proceso intermediario entre el shell y baz
, donde como con FOO=bar baz
el shell invoca directamente a baz
.
Entonces, en ese sentido, FOO=bar baz
es preferible.
Las únicas situaciones en las que me encuentro usando env FOO=bar
in es donde tengo que pasar un comando a otro comando.
Como ejemplo específico, digamos que tengo un script contenedor que realiza algunas modificaciones del entorno y luego llama a exec
en el comando que se le pasó, como:
#!/bin/bash
FOO=bob
some stuff
exec "[email protected]"
Si lo ejecuta como myscript FOO=bar baz
, el exec
arrojará un error como exec FOO=bar baz
no es válido.
En su lugar, lo llama como myscript env FOO=bar baz
que se ejecuta como exec env FOO=bar baz
, y es perfectamente válido.