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.