@@ -748,6 +748,7 @@ func (e *Env) Exec(l *ui.UI, pkg *manifest.Package, binary string, args []string
748748 return errors .WithStack (err )
749749 }
750750 ops := e .allEnvarOpsForPackages (runtimeDeps , pkg , installed ... )
751+ ops = append (ops , e .systemEnvOverrideOps (ops )... )
751752 packageHermitBin , err := e .getPackageRuntimeEnvops (pkg )
752753 if err != nil {
753754 return errors .WithStack (err )
@@ -777,6 +778,23 @@ func (e *Env) Exec(l *ui.UI, pkg *manifest.Package, binary string, args []string
777778 return errors .Errorf ("%s: could not find binary %q" , pkg , binary )
778779}
779780
781+ // systemEnvOverrideOps returns environment variables defined in the system environment that were previously overriden by Hermit
782+ func (e * Env ) systemEnvOverrideOps (ops envars.Ops ) envars.Ops {
783+ if activeEnv , ok := os .LookupEnv ("HERMIT_ENV" ); ! ok || activeEnv != e .envDir {
784+ return envars.Ops {}
785+ }
786+
787+ var overrides envars.Ops
788+ for _ , op := range ops {
789+ envar := op .Envar ()
790+ if v , ok := os .LookupEnv (envar ); ok {
791+ overrides = append (overrides , & envars.Force {Name : envar , Value : v })
792+ }
793+ }
794+
795+ return overrides
796+ }
797+
780798func (e * Env ) getPackageRuntimeEnvops (pkg * manifest.Package ) (envars.Op , error ) {
781799 // If the package contains a Hermit env, add that to the PATH for runtime dependencies
782800 pkgEnv , err := OpenEnv (pkg .Root , e .state , e .packageSource , nil , e .httpClient , e .scriptSums )
0 commit comments