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ý.