Was ist der Unterschied zwischen dem Befehl
$ env FOO=bar baz
und
$ FOO=bar baz
Was bewirkt env
haben?
Akzeptierte Antwort:
Sie sind funktional gleichwertig.
Der Hauptunterschied besteht darin, dass env FOO=bar baz
beinhaltet das Aufrufen eines zwischengeschalteten Prozesses zwischen der Shell und baz
, wo wie bei FOO=bar baz
die Shell ruft direkt baz
auf .
Also in dieser Hinsicht FOO=bar baz
wird bevorzugt.
Die einzigen Situationen, in denen ich mich mit env FOO=bar
befinde in ist, wo ich einen Befehl an einen anderen Befehl übergeben muss.
Nehmen wir als spezifisches Beispiel an, ich habe ein Wrapper-Skript, das einige Änderungen an der Umgebung durchführt und dann exec
aufruft auf den Befehl, der ihm übergeben wurde, wie zum Beispiel:
#!/bin/bash
FOO=bob
some stuff
exec "[email protected]"
Wenn Sie es als myscript FOO=bar baz
ausführen , die exec
wird einen Fehler als exec FOO=bar baz
ausgeben ist ungültig.
Stattdessen nennen Sie es als myscript env FOO=bar baz
was als exec env FOO=bar baz
ausgeführt wird , und ist vollkommen gültig.