/*
- * Copyright 2016 Facebook, Inc.
+ * Copyright 2017 Facebook, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
#include <string>
#include <vector>
+#include <folly/Conv.h>
#include <folly/Format.h>
#include <folly/Range.h>
/**
* Quotes an argument to make it suitable for use as shell command arguments.
*/
-std::string shellQuote(StringPiece argument) {
- std::string quoted = "'";
- for (auto c : argument) {
- if (c == '\'') {
- quoted += "'\\''";
- } else {
- quoted += c;
- }
- }
- return quoted + "'";
-}
+std::string shellQuote(StringPiece argument);
/**
* Create argument array for `Subprocess()` for a process running in a
* shell.
*
- * The shell to use is taken from the environment variable $SHELL,
- * or /bin/sh if $SHELL is unset.
+ * The shell to use is always going to be `/bin/sh`.
*
* The format string should always be a string literal to protect against
* shell injections. Arguments will automatically be escaped with `'`.
std::vector<std::string> shellify(
const StringPiece format,
Arguments&&... arguments) {
- const char* shell = getenv("SHELL");
- if (!shell) {
- shell = "/bin/sh";
- }
auto command = sformat(
format,
shellQuote(to<std::string>(std::forward<Arguments>(arguments)))...);
- return {shell, "-c", command};
+ return {"/bin/sh", "-c", command};
}
} // folly