diff options
-rw-r--r-- | lib/strings.nix | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/lib/strings.nix b/lib/strings.nix index 04376a5f2fb..5e5f7b37866 100644 --- a/lib/strings.nix +++ b/lib/strings.nix @@ -203,20 +203,19 @@ rec { */ escape = list: replaceChars list (map (c: "\\${c}") list); - /* Escape all characters that have special meaning in the Bourne shell. + /* Quote string to be used safely within the Bourne shell. Example: - escapeShellArg "so([<>])me" - => "so\\(\\[\\<\\>\\]\\)me" + escapeShellArg "esc'ape\nme" + => "'esc'\\''ape\nme'" */ - escapeShellArg = arg: - lib.escape (stringToCharacters "\\ ';$`()|<>\t*[]") (toString arg); + escapeShellArg = arg: "'${replaceStrings ["'"] ["'\\''"] (toString arg)}'"; - /* Escape all arguments to be passed to the Bourne shell. + /* Quote all arguments to be safely passed to the Bourne shell. Example: - escapeShellArgs ["one" "two three"] - => "one two\\ three" + escapeShellArgs ["one" "two three" "four'five"] + => "'one' 'two three' 'four'\\''five'" */ escapeShellArgs = concatMapStringsSep " " escapeShellArg; |