diff --git a/env.cpp b/env.cpp index 13aacf570..1a04665eb 100644 --- a/env.cpp +++ b/env.cpp @@ -901,6 +901,7 @@ int env_remove(const wcstring &key, int var_mode) !(var_mode & ENV_GLOBAL) && !(var_mode & ENV_LOCAL)) { + bool is_exported = uvars()->get_export(key); erased = uvars() && uvars()->remove(key); if (erased) { @@ -911,6 +912,9 @@ int env_remove(const wcstring &key, int var_mode) ev.arguments.push_back(key); event_fire(&ev); } + + if (is_exported) + mark_changed_exported(); } react_to_variable_change(key); diff --git a/tests/test3.in b/tests/test3.in index 51d545c6b..970741d16 100644 --- a/tests/test3.in +++ b/tests/test3.in @@ -149,6 +149,10 @@ else end set -Ue __fish_test_universal_variables_variable_foo + +# Should no longer be in environment (#2046) +env | sgrep __fish_test_universal_variables_variable_foo + set -Ux __fish_test_universal_variables_variable_foo bar set -U __fish_test_universal_variables_variable_foo baz if test (/bin/sh -c 'echo $__fish_test_universal_variables_variable_foo') = baz -a (../fish -c 'echo $__fish_test_universal_variables_variable_foo') = baz