From 9230ccc0877872803a3f456ad7b6b00269d7faed Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Mon, 10 Dec 2012 18:41:01 +0100 Subject: [PATCH] the shell used for command execution can be changed using the 'shell' option --- src/option_manager.cc | 1 + src/shell_manager.cc | 8 +++++--- 2 files changed, 6 insertions(+), 3 deletions(-) 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); }