remote: Fix opening a remote terminal failing on certain systems (#39715)

Closes #38538

Release Notes:

- Fixed an issue where opening a remote terminal failed on systems like
BusyBox, Alpine, Amazon Linux 2, some CentOS images, etc., due to an
invalid option 'C'.
This commit is contained in:
Smit Barmase
2025-10-08 03:04:32 +05:30
committed by GitHub
parent cd67941598
commit 8cb67ec91c
+7 -6
View File
@@ -1026,7 +1026,7 @@ fn build_command(
) -> Result<CommandTemplate> {
use std::fmt::Write as _;
let mut exec = String::from("exec env -C ");
let mut exec = String::new();
if let Some(working_dir) = working_dir {
let working_dir = RemotePathBuf::new(working_dir, ssh_path_style).to_string();
@@ -1035,13 +1035,14 @@ fn build_command(
const TILDE_PREFIX: &'static str = "~/";
if working_dir.starts_with(TILDE_PREFIX) {
let working_dir = working_dir.trim_start_matches("~").trim_start_matches("/");
write!(exec, "\"$HOME/{working_dir}\" ",).unwrap();
write!(exec, "cd \"$HOME/{working_dir}\" && ",).unwrap();
} else {
write!(exec, "\"{working_dir}\" ",).unwrap();
write!(exec, "cd \"{working_dir}\" && ",).unwrap();
}
} else {
write!(exec, "\"$HOME\" ").unwrap();
write!(exec, "cd && ").unwrap();
};
write!(exec, "exec env ").unwrap();
for (k, v) in input_env.iter() {
if let Some((k, v)) = shlex::try_quote(k).ok().zip(shlex::try_quote(v).ok()) {
@@ -1106,7 +1107,7 @@ mod tests {
"-p",
"2222",
"-t",
"exec env -C \"$HOME/work\" INPUT_VA=val remote_program arg1 arg2"
"cd \"$HOME/work\" && exec env INPUT_VA=val remote_program arg1 arg2"
]
);
assert_eq!(command.env, env);
@@ -1137,7 +1138,7 @@ mod tests {
"-L",
"1:foo:2",
"-t",
"exec env -C \"$HOME\" INPUT_VA=val /bin/fish -l"
"cd && exec env INPUT_VA=val /bin/fish -l"
]
);
assert_eq!(command.env, env);