util: Respect user-defined SHELL environment variable (#40181)

Xiaobo Liu created

Fix issue where Zed would unconditionally override user's custom shell
with system default from passwd entry.

Closes https://github.com/zed-industries/zed/issues/40171

Release Notes:

- Fix issue where Zed would unconditionally override user's custom shell
with system default from passwd entry.

---------

Signed-off-by: Xiaobo Liu <cppcoffee@gmail.com>

Change summary

crates/util/src/util.rs | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)

Detailed changes

crates/util/src/util.rs 🔗

@@ -279,7 +279,11 @@ fn load_shell_from_passwd() -> Result<()> {
     );
 
     let shell = unsafe { std::ffi::CStr::from_ptr(entry.pw_shell).to_str().unwrap() };
-    if env::var("SHELL").map_or(true, |shell_env| shell_env != shell) {
+    let should_set_shell = env::var("SHELL").map_or(true, |shell_env| {
+        shell_env != shell && !std::path::Path::new(&shell_env).exists()
+    });
+
+    if should_set_shell {
         log::info!(
             "updating SHELL environment variable to value from passwd entry: {:?}",
             shell,