Index: lldb/source/Utility/Args.cpp =================================================================== --- lldb/source/Utility/Args.cpp +++ lldb/source/Utility/Args.cpp @@ -385,6 +385,7 @@ }; static ShellDescriptor g_Shells[] = {{ConstString("bash"), " '\"<>()&"}, + {ConstString("fish"), " '\"<>()&\\|;"}, {ConstString("tcsh"), " '\"<>()&$"}, {ConstString("sh"), " '\"<>()&"}}; Index: lldb/unittests/Utility/ArgsTest.cpp =================================================================== --- lldb/unittests/Utility/ArgsTest.cpp +++ lldb/unittests/Utility/ArgsTest.cpp @@ -331,6 +331,14 @@ // Bash however doesn't need escaping for "$". EXPECT_EQ(Args::GetShellSafeArgument(bash, "a$b"), "a$b"); + // Test escaping fish special characters. + FileSpec fish("/bin/fish", FileSpec::Style::posix); + EXPECT_EQ(Args::GetShellSafeArgument(fish, R"( '"<>()&\|;)"), + R"(\ \'\"\<\>\(\)\&\\\|\;)"); + // Normal characters and expressions that shouldn't be escaped. + EXPECT_EQ(Args::GetShellSafeArgument(fish, "aA$1*"), "aA$1*"); + + // Try escaping with an unknown shell. FileSpec unknown_shell("/bin/unknown_shell", FileSpec::Style::posix); EXPECT_EQ(Args::GetShellSafeArgument(unknown_shell, "a'b"), "a\\'b");