Jaký je rozdíl mezi příkazem
$ env FOO=bar baz
a
$ FOO=bar baz
Jaký účinek má env
mít?
Přijatá odpověď:
Jsou funkčně ekvivalentní.
Hlavní rozdíl je v tom, že env FOO=bar baz
zahrnuje vyvolání zprostředkujícího procesu mezi shellem a baz
, kde jako u FOO=bar baz
shell přímo vyvolá baz
.
Takže v tomto ohledu FOO=bar baz
je preferováno.
Jediné situace, ve kterých se nacházím, používám env FOO=bar
in je místo, kde musím předat příkaz jinému příkazu.
Jako konkrétní příklad řekněme, že mám obalový skript, který provádí některé úpravy prostředí a poté volá exec
na příkaz, který mu byl předán, například:
#!/bin/bash
FOO=bob
some stuff
exec "[email protected]"
Pokud jej spustíte jako myscript FOO=bar baz
, exec
vyvolá chybu jako exec FOO=bar baz
je neplatný.
Místo toho jej nazýváte myscript env FOO=bar baz
který se provede jako exec env FOO=bar baz
, a je dokonale platný.