Qual è la differenza tra il comando
$ env FOO=bar baz
e
$ FOO=bar baz
Che effetto ha env
hai?
Risposta accettata:
Sono funzionalmente equivalenti.
La differenza principale è che env FOO=bar baz
implica invocare un processo intermedio tra la shell e baz
, dove come con FOO=bar baz
la shell invoca direttamente baz
.
Quindi, a questo proposito, FOO=bar baz
è preferito.
Le uniche situazioni in cui mi trovo ad usare env FOO=bar
in è dove devo passare un comando a un altro comando.
Come esempio specifico, diciamo che ho uno script wrapper che esegue alcune modifiche dell'ambiente, e quindi chiama exec
sul comando che gli è stato passato, come ad esempio:
#!/bin/bash
FOO=bob
some stuff
exec "[email protected]"
Se lo esegui come myscript FOO=bar baz
, il exec
genererà un errore come exec FOO=bar baz
non è valido.
Invece lo chiami come myscript env FOO=bar baz
che viene eseguito come exec env FOO=bar baz
, ed è perfettamente valido.