diff --git a/src/option_manager.cc b/src/option_manager.cc index 2472f9dd..3b8f23b9 100644 --- a/src/option_manager.cc +++ b/src/option_manager.cc @@ -97,6 +97,7 @@ GlobalOptions::GlobalOptions() set_option("indentwidth", Option(4)); set_option("eolformat", Option("lf")); set_option("BOM", Option("no")); + set_option("shell", Option("sh")); set_option("complete_prefix", Option(1)); set_option("ignored_files", Option(R"(^(\..*|.*\.(o|so|a))$)")); } diff --git a/src/shell_manager.cc b/src/shell_manager.cc index f35b3ddc..56ab1904 100644 --- a/src/shell_manager.cc +++ b/src/shell_manager.cc @@ -1,6 +1,7 @@ #include "shell_manager.hh" #include "debug.hh" +#include "context.hh" #include #include @@ -116,14 +117,15 @@ String ShellManager::pipe(const String& input, ++it; } - std::vector execparams = { "sh", "-c", cmdline.c_str() }; + String shell = context.options()["shell"].as_string(); + std::vector execparams = { shell.c_str(), "-c", cmdline.c_str() }; if (not params.empty()) - execparams.push_back("sh"); + execparams.push_back(shell.c_str()); for (auto& param : params) execparams.push_back(param.c_str()); execparams.push_back(NULL); - execvp("sh", (char* const*)execparams.data()); + execvp(shell.c_str(), (char* const*)execparams.data()); exit(-1); } catch (...) { exit(-1); }