===========================================================
                                      .___ __  __   
          _________________  __ __  __| _/|__|/  |_ 
         / ___\_` __ \__  \ |  |  \/ __ | | \\_  __\
        / /_/  >  | \// __ \|  |  / /_/ | |  ||  |  
        \___  /|__|  (____  /____/\____ | |__||__|  
       /_____/            \/           \/           
              grep rough audit - static analysis tool
                  v2.8 written by @Wireghoul
=================================[justanotherhacker.com]===
node-puka-1.0.1+dfsg/README.md-59-const arg = 'file with spaces.txt';
node-puka-1.0.1+dfsg/README.md:60:execSync(sh`some-command ${arg}`);
node-puka-1.0.1+dfsg/README.md-61-```
##############################################
node-puka-1.0.1+dfsg/README.md-113-const title = '"this" & "that"';
node-puka-1.0.1+dfsg/README.md:114:sh`script --title=${title}`; // => "script '--title=\"this\" & \"that\"'"
node-puka-1.0.1+dfsg/README.md-115-// Note: these examples show results for non-Windows platforms.
##############################################
node-puka-1.0.1+dfsg/README.md-119-const names = ['file1', 'file 2'];
node-puka-1.0.1+dfsg/README.md:120:sh`rimraf ${names}.txt`; // => "rimraf file1.txt 'file 2.txt'"
node-puka-1.0.1+dfsg/README.md-121-
##############################################
node-puka-1.0.1+dfsg/README.md-123-const cmd2 = ['use-input', '-abc'];
node-puka-1.0.1+dfsg/README.md:124:sh`${cmd1}|${cmd2}`; // => "cat 'file 1.txt' 'file 2.txt'|use-input -abc"
node-puka-1.0.1+dfsg/README.md-125-```
##############################################
node-puka-1.0.1+dfsg/README.md-146-const both = true;
node-puka-1.0.1+dfsg/README.md:147:sh`foo ${unquoted(both ? '&&' : '||')} bar`; // => 'foo && bar'
node-puka-1.0.1+dfsg/README.md-148-```
##############################################
node-puka-1.0.1+dfsg/README.md-166-console.log('cmd' + args.map(a => ' ' + quoteForShell(a)).join(''));
node-puka-1.0.1+dfsg/README.md:167:console.log(sh`cmd ${args}`); // same as above
node-puka-1.0.1+dfsg/README.md-168-
node-puka-1.0.1+dfsg/README.md-169-console.log('cmd' + args.map(a => ' ' + quoteForShell(a, true)).join(''));
node-puka-1.0.1+dfsg/README.md:170:console.log(sh`cmd "${args}"`); // same as above
node-puka-1.0.1+dfsg/README.md-171-```
##############################################
node-puka-1.0.1+dfsg/README.md-272-    double quotes, or any of the special characters
node-puka-1.0.1+dfsg/README.md:273:    ``# $ & ( ) ; < > \ ` |``;
node-puka-1.0.1+dfsg/README.md-274--   quotations, which are matching single or double quotes surrounding any
node-puka-1.0.1+dfsg/README.md-275-    characters other than the delimiting quote; and
node-puka-1.0.1+dfsg/README.md:276:-   placeholders, using the standard JavaScript template syntax (`${}`).
node-puka-1.0.1+dfsg/README.md-277-    (Placeholders may also appear inside quotations.)
node-puka-1.0.1+dfsg/README.md-278-
node-puka-1.0.1+dfsg/README.md:279:The special characters ``# $ & ( ) ; < > \ ` |``, if unquoted, form their own
node-puka-1.0.1+dfsg/README.md-280-words.
##############################################
node-puka-1.0.1+dfsg/README.md-292-```javascript
node-puka-1.0.1+dfsg/README.md:293:sh`echo "${'single = \', double = "'}"` // => "echo 'single = '\\'', double = \"'"
node-puka-1.0.1+dfsg/README.md-294-```
##############################################
node-puka-1.0.1+dfsg/README.md-324-```javascript
node-puka-1.0.1+dfsg/README.md:325:sh`script --file="${'herp derp'}.txt"`; // => "script --file='herp derp.txt'"
node-puka-1.0.1+dfsg/README.md-326-```
##############################################
node-puka-1.0.1+dfsg/README.md-332-const words = ['oneword', 'two words'];
node-puka-1.0.1+dfsg/README.md:333:sh`minimal ${words[0]}`; // => "minimal oneword"
node-puka-1.0.1+dfsg/README.md:334:sh`minimal ${words[1]}`; // => "minimal 'two words'"
node-puka-1.0.1+dfsg/README.md:335:sh`consistent '${words[0]}'`; // => "consistent 'oneword'"
node-puka-1.0.1+dfsg/README.md:336:sh`consistent '${words[1]}'`; // => "consistent 'two words'"
node-puka-1.0.1+dfsg/README.md-337-```
##############################################
node-puka-1.0.1+dfsg/README.md-347-const files = ['foo', 'bar'];
node-puka-1.0.1+dfsg/README.md:348:sh`script ${files}`; // => "script foo bar"
node-puka-1.0.1+dfsg/README.md:349:sh`script --file=${files}`; // => "script --file=foo --file=bar"
node-puka-1.0.1+dfsg/README.md:350:sh`script --file=${[]}`; // => "script"
node-puka-1.0.1+dfsg/README.md-351-```
##############################################
node-puka-1.0.1+dfsg/README.md-357-const cmd = ['script', 'foo', 'bar'];
node-puka-1.0.1+dfsg/README.md:358:sh`${cmd}|another-script`; // => "script foo bar|another-script"
node-puka-1.0.1+dfsg/README.md-359-```
##############################################
node-puka-1.0.1+dfsg/README.md-365-// Same word
node-puka-1.0.1+dfsg/README.md:366:sh`... ${names}.${exts}`; // => "... foo.log foo.txt bar.log bar.txt"
node-puka-1.0.1+dfsg/README.md:367:sh`... "${names} ${exts}"`; // => "... 'foo log' 'foo txt' 'bar log' 'bar txt'"
node-puka-1.0.1+dfsg/README.md-368-
node-puka-1.0.1+dfsg/README.md-369-// Not the same word (extra space just for emphasis):
node-puka-1.0.1+dfsg/README.md:370:sh`... ${names}   ${exts}`; // => "... foo bar   log txt"
node-puka-1.0.1+dfsg/README.md:371:sh`... ${names};${exts}`; // => "... foo bar;log txt"
node-puka-1.0.1+dfsg/README.md-372-```
##############################################
node-puka-1.0.1+dfsg/README.md-377-```javascript
node-puka-1.0.1+dfsg/README.md:378:sh`script > ${['foo', 'bar']}.txt`; // => "script > foo.txt > bar.txt"
node-puka-1.0.1+dfsg/README.md:379:sh`script > ${[]}.txt`; // => "script"
node-puka-1.0.1+dfsg/README.md-380-```
##############################################
node-puka-1.0.1+dfsg/README.md-389-const fields = ['foo', 'bar'];
node-puka-1.0.1+dfsg/README.md:390:sh`${unquoted(cmd)} | json ${fields}`; // => "script < input.txt | json foo bar"
node-puka-1.0.1+dfsg/README.md-391-```
##############################################
node-puka-1.0.1+dfsg/README.md-402-const url = 'http://example.com/data.json?x=1&y=2';
node-puka-1.0.1+dfsg/README.md:403:const curl = ShellString.sh`curl -L ${url}`;
node-puka-1.0.1+dfsg/README.md-404-const fields = ['foo', 'bar'];
node-puka-1.0.1+dfsg/README.md:405:sh`${curl} | json ${fields}`; // => "curl -L 'http://example.com/data.json?x=1&y=2' | json foo bar"
node-puka-1.0.1+dfsg/README.md-406-```
##############################################
node-puka-1.0.1+dfsg/gulpfile.babel.js-58-  return writeFile(path.join(dir, 'index.js'),
node-puka-1.0.1+dfsg/gulpfile.babel.js:59:    files.map(f => `export * from './${f.slice(0, -3)}';\n`).join(''));
node-puka-1.0.1+dfsg/gulpfile.babel.js-60-};
##############################################
node-puka-1.0.1+dfsg/src/ShellString.secret.test.js-36-test("can redirect to a platform-appropriate /dev/null", t => {
node-puka-1.0.1+dfsg/src/ShellString.secret.test.js:37:  const cmd = sh`script > ${devNull}`;
node-puka-1.0.1+dfsg/src/ShellString.secret.test.js-38-  t.expect(cmd.toString('linux'),
##############################################
node-puka-1.0.1+dfsg/src/ShellString.secret.test.js-45-  const args = ['%test%'];
node-puka-1.0.1+dfsg/src/ShellString.secret.test.js:46:  const cmd = sh`script | ${exe(sh`node ${args}`)} | script`;
node-puka-1.0.1+dfsg/src/ShellString.secret.test.js-47-  t.expect(cmd.toString('linux'),
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-12-  const nice = 'world';
node-puka-1.0.1+dfsg/src/ShellString.test.js:13:  t.expect(sh`hello ${nice}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-14-    "to be", 'hello world');
node-puka-1.0.1+dfsg/src/ShellString.test.js-15-  const ugly = "don't go";
node-puka-1.0.1+dfsg/src/ShellString.test.js:16:  t.expect(sh`hello ${ugly}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-17-    "to be", "hello 'don'\\''t go'");
node-puka-1.0.1+dfsg/src/ShellString.test.js:18:  t.expect(sh`hello ${''}`.toString('linux'), "to be", "hello ''");
node-puka-1.0.1+dfsg/src/ShellString.test.js-19-  t.expect(sh`open "Alice's file.txt" -a 'Notepad'`.toString('linux'),
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-24-  const nice = 'world';
node-puka-1.0.1+dfsg/src/ShellString.test.js:25:  t.expect(sh`hello ${nice}`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-26-    "to be", 'hello world');
node-puka-1.0.1+dfsg/src/ShellString.test.js-27-  const ugly = '"human"';
node-puka-1.0.1+dfsg/src/ShellString.test.js:28:  t.expect(sh`hello ${ugly}`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-29-    "to be", 'hello ^^^"\\^^^"human\\^^^"^^^"');
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-44-test("absorb prefix into interpolation", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:45:  t.expect(sh`--x=${'y z'}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-46-    "to be", "'--x=y z'"));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-48-test("don't absorb prefix into unquoted", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:49:  t.expect(sh`--w=${'x y'}${unquoted(' z')}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-50-    "to be", "'--w=x y' z"));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-56-test("absorb suffix into interpolation", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:57:  t.expect(sh`${'My Program'}.exe`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-58-    "to be", '"My Program.exe"'));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-64-test("don't absorb redirect", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:65:  t.expect(sh`script <${'file name'}`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-66-    "to be", 'script <"file name"'));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-75-test("don't absorb pipe", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:76:  t.expect(sh`script ${'file name'}|next-script`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-77-    "to be", 'script "file name"|next-script');
node-puka-1.0.1+dfsg/src/ShellString.test.js:78:  t.expect(sh`script stuff|${['next', 'script']}`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-79-    "to be", 'script stuff|next script');
node-puka-1.0.1+dfsg/src/ShellString.test.js:80:  t.expect(sh`script ${'file name'}|${'next script'}`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-81-    "to be", 'script "file name"|"next script"');
node-puka-1.0.1+dfsg/src/ShellString.test.js:82:  t.expect(sh`script stuff|do-${['next', 'my script']}`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-83-    "to be", 'script stuff|do-next "do-my script"');
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-90-test("interpolation inside quotes", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:91:  t.expect(sh`"quoted ${'spaced string'}"`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-92-    "to be", "'quoted spaced string'"));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-94-test("unquoted", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:95:  t.expect(sh`script ${unquoted('>')} file`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-96-    "to be", 'script > file'));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-98-test("unquoted inside quotes", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:99:  t.expect(sh`"${unquoted('x x')}"`.toString('win32'), "to be", '"x x"'));
node-puka-1.0.1+dfsg/src/ShellString.test.js-100-
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-103-  const cmdB = sh`script bar`;
node-puka-1.0.1+dfsg/src/ShellString.test.js:104:  t.expect(sh`${cmdA} | ${cmdB}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-105-    "to be", 'script foo | script bar');
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-109-  const cmdA = sh`why 'would' you`;
node-puka-1.0.1+dfsg/src/ShellString.test.js:110:  t.expect(sh`"${cmdA} want this"`.toString('win32'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-111-    "to be", '^"why^ \\^"would\\^"^ you^ want^ this^"');
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-114-test("concatenating special values", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:115:  t.expect(sh`boo${sh`"h o o"`}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-116-    "to be", "boo'h o o'");
node-puka-1.0.1+dfsg/src/ShellString.test.js:117:  t.expect(sh`boo${unquoted('h o o')}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-118-    "to be", "booh o o");
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-121-test("can interpolate arrays", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:122:  t.expect(sh`cat ${["file one", "file two"]}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-123-    "to be", "cat 'file one' 'file two'"));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-125-test("can quote interpolated arrays", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:126:  t.expect(sh`cat '${["file_one", "file_two"]}'`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-127-    "to be", "cat 'file_one' 'file_two'"));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-129-test("can handle empty arrays", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:130:  t.expect(sh`cat ${[]}`.toString('linux'), "to be", 'cat');
node-puka-1.0.1+dfsg/src/ShellString.test.js:131:  t.expect(sh`cat '${[]}'`.toString('linux'), "to be", 'cat');
node-puka-1.0.1+dfsg/src/ShellString.test.js-132-});
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-134-test("arrays with affixes", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:135:  t.expect(sh`script --file=${['foo', 'bar']}.txt`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-136-    "to be", "script --file=foo.txt --file=bar.txt");
node-puka-1.0.1+dfsg/src/ShellString.test.js:137:  t.expect(sh`script --file=${[]}.txt`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-138-    "to be", "script");
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-141-test("multiple arrays", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:142:  t.expect(sh`cat ${[]} ${['foo', 'bar']}.${['txt', 'log']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-143-    "to be", "cat foo.txt foo.log bar.txt bar.log");
node-puka-1.0.1+dfsg/src/ShellString.test.js:144:  t.expect(sh`cat ${[]} ${['foo', 'bar']}.${[]}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-145-    "to be", "cat");
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-149-  const n = '0123456789'.split('');
node-puka-1.0.1+dfsg/src/ShellString.test.js:150:  t.expect(() => sh`echo ${n}${n}${n}${n}${n}${n}${n}${n}`,
node-puka-1.0.1+dfsg/src/ShellString.test.js-151-    "to throw", new RangeError("Far too many elements to interpolate"));
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-154-test("redirect with arrays", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:155:  t.expect(sh`script  < ${['foo', 'bar']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-156-    "to be", "script  < foo  < bar");
node-puka-1.0.1+dfsg/src/ShellString.test.js:157:  t.expect(sh`script >>${['foo', 'bar']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-158-    "to be", "script >>foo >>bar");
node-puka-1.0.1+dfsg/src/ShellString.test.js:159:  t.expect(sh`script<${['foo', 'bar']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-160-    "to be", "script<foo<bar");
node-puka-1.0.1+dfsg/src/ShellString.test.js:161:  t.expect(sh`script  < ${[]}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-162-    "to be", "script");
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-165-test("numbered redirects", t => {
node-puka-1.0.1+dfsg/src/ShellString.test.js:166:  t.expect(sh`script 2> ${['foo', 'bar']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-167-    "to be", "script 2> foo 2> bar");
node-puka-1.0.1+dfsg/src/ShellString.test.js:168:  t.expect(sh`script 2 > ${['foo', 'bar']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-169-    "to be", "script 2 > foo > bar");
node-puka-1.0.1+dfsg/src/ShellString.test.js:170:  t.expect(sh`script2> ${['foo', 'bar']}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-171-    "to be", "script2> foo> bar");
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-202-  };
node-puka-1.0.1+dfsg/src/ShellString.test.js:203:  t.expect(sh`script ${gen()}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-204-    "to be", "script foo bar baz 'qu ux'");
##############################################
node-puka-1.0.1+dfsg/src/ShellString.test.js-207-test("non-string values", t =>
node-puka-1.0.1+dfsg/src/ShellString.test.js:208:  t.expect(sh`${[null, void 0, true, [], {}]}`.toString('linux'),
node-puka-1.0.1+dfsg/src/ShellString.test.js-209-    "to be", "null undefined true '' '[object Object]'"));
##############################################
node-puka-1.0.1+dfsg/src/internal/parse.js-159-    throw new SyntaxError(
node-puka-1.0.1+dfsg/src/internal/parse.js:160:      `String is missing a ${String.fromCharCode(quote)} character`);
node-puka-1.0.1+dfsg/src/internal/parse.js-161-  }
##############################################
node-puka-1.0.1+dfsg/src/internal/parse.js-171-const reQuotation2 = sticky('[^"]+');
node-puka-1.0.1+dfsg/src/internal/parse.js:172:const reText = sticky('[^\\s"#$&\'();<>\\\\`|]+|([#$&()\\\\`|]+)');
node-puka-1.0.1+dfsg/src/internal/parse.js-173-const reRedirectOrSpace = sticky('(\\s*\\d*[<>]+\\s*)|\\s+');
##############################################
node-puka-1.0.1+dfsg/src/internal/platform-sh.js-3-    ? forceQuote || shMetaChars.test(text)
node-puka-1.0.1+dfsg/src/internal/platform-sh.js:4:      ? `'${text.replace(/'/g, "'\\''")}'`
node-puka-1.0.1+dfsg/src/internal/platform-sh.js-5-        .replace(/^(?:'')+(?!$)/, '')
##############################################
node-puka-1.0.1+dfsg/src/internal/platform-win32.js-28-    forceQuote || /[\t "]/.test(text)
node-puka-1.0.1+dfsg/src/internal/platform-win32.js:29:      ? `"${text.replace(/\\+(?=$|")/g, '$&$&').replace(/"/g, '\\"')}"`
node-puka-1.0.1+dfsg/src/internal/platform-win32.js-30-      : text;
##############################################
node-puka-1.0.1+dfsg/src/internal/regex-utils.js-11-  ? source => new RegExp(source, 'y')
node-puka-1.0.1+dfsg/src/internal/regex-utils.js:12:  : source => new RegExp(`^(?:${source})`);
node-puka-1.0.1+dfsg/src/internal/regex-utils.js-13-
##############################################
node-puka-1.0.1+dfsg/src/quoteForShell.js-11- * console.log('cmd' + args.map(a => ' ' + quoteForShell(a)).join(''));
node-puka-1.0.1+dfsg/src/quoteForShell.js:12: * console.log(sh`cmd ${args}`); // same as above
node-puka-1.0.1+dfsg/src/quoteForShell.js-13- *
node-puka-1.0.1+dfsg/src/quoteForShell.js-14- * console.log('cmd' + args.map(a => ' ' + quoteForShell(a, true)).join(''));
node-puka-1.0.1+dfsg/src/quoteForShell.js:15: * console.log(sh`cmd "${args}"`); // same as above
node-puka-1.0.1+dfsg/src/quoteForShell.js-16- * ```
##############################################
node-puka-1.0.1+dfsg/src/sh.js-14- * const title = '"this" & "that"';
node-puka-1.0.1+dfsg/src/sh.js:15: * sh`script --title=${title}`; // => "script '--title=\"this\" & \"that\"'"
node-puka-1.0.1+dfsg/src/sh.js-16- * // Note: these examples show results for non-Windows platforms.
##############################################
node-puka-1.0.1+dfsg/src/sh.js-20- * const names = ['file1', 'file 2'];
node-puka-1.0.1+dfsg/src/sh.js:21: * sh`rimraf ${names}.txt`; // => "rimraf file1.txt 'file 2.txt'"
node-puka-1.0.1+dfsg/src/sh.js-22- *
##############################################
node-puka-1.0.1+dfsg/src/sh.js-24- * const cmd2 = ['use-input', '-abc'];
node-puka-1.0.1+dfsg/src/sh.js:25: * sh`${cmd1}|${cmd2}`; // => "cat 'file 1.txt' 'file 2.txt'|use-input -abc"
node-puka-1.0.1+dfsg/src/sh.js-26- *
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-25-        ? ["to satisfy", cmp]
node-puka-1.0.1+dfsg/src/sh.test.js:26:        : ["to be", `${cmp}\n`]);
node-puka-1.0.1+dfsg/src/sh.test.js-27-  });
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-68-    expect(
node-puka-1.0.1+dfsg/src/sh.test.js:69:      sh`expect-arg 0 ${file} ${arg}`,
node-puka-1.0.1+dfsg/src/sh.test.js-70-      "to output to stderr satisfying", allOk(1))));
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-116-  return tempFile('ok\n', arg, file => t.expect(
node-puka-1.0.1+dfsg/src/sh.test.js:117:    sh`nodecat < ${file} | nodecat`,
node-puka-1.0.1+dfsg/src/sh.test.js-118-    "to output to stdout", 'ok'));
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-123-  return tempFile('ok\n', arg, file => t.expect(
node-puka-1.0.1+dfsg/src/sh.test.js:124:    sh`< ${file} nodecat | nodecat`,
node-puka-1.0.1+dfsg/src/sh.test.js-125-    "to output to stdout", 'ok'));
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-131-    await t.expect(
node-puka-1.0.1+dfsg/src/sh.test.js:132:      sh`echo-cli foo | nodecat > ${file} && echo-cli ok`,
node-puka-1.0.1+dfsg/src/sh.test.js-133-      "to output to stdout", 'ok');
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-141-    await t.expect(
node-puka-1.0.1+dfsg/src/sh.test.js:142:      sh`echo-cli foo | > ${file} nodecat && echo-cli ok`,
node-puka-1.0.1+dfsg/src/sh.test.js-143-      "to output to stdout", 'ok');
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-164-for (const str of ['^', ' ']) {
node-puka-1.0.1+dfsg/src/sh.test.js:165:  test.serial(`can redirect ${JSON.stringify(str)} [spawn]`, t =>
node-puka-1.0.1+dfsg/src/sh.test.js-166-    tempFile('foo', str, async file => {
node-puka-1.0.1+dfsg/src/sh.test.js-167-      for (const cmd of [
node-puka-1.0.1+dfsg/src/sh.test.js:168:        sh`expect-arg 0 - foo < ${file}`,
node-puka-1.0.1+dfsg/src/sh.test.js:169:        sh`expect-arg 0 - foo < ${file} | nodecat`,
node-puka-1.0.1+dfsg/src/sh.test.js:170:        sh`(expect-arg 0 - foo < ${file} | nodecat) | nodecat`,
node-puka-1.0.1+dfsg/src/sh.test.js-171-      ]) {
##############################################
node-puka-1.0.1+dfsg/src/sh.test.js-180-
node-puka-1.0.1+dfsg/src/sh.test.js:181:  test.serial(`can pipe ${printableArg} [spawn]`, ignoreLineBreakErrors(t =>
node-puka-1.0.1+dfsg/src/sh.test.js-182-    tempFile(arg, file =>
node-puka-1.0.1+dfsg/src/sh.test.js-183-      t.expect(
node-puka-1.0.1+dfsg/src/sh.test.js:184:        sh`expect-arg 0 ${file} ${arg} | expect-arg 1 ${file} ${arg}`,
node-puka-1.0.1+dfsg/src/sh.test.js-185-        "to output to stderr satisfying", allOk(2)))));
node-puka-1.0.1+dfsg/src/sh.test.js-186-
node-puka-1.0.1+dfsg/src/sh.test.js:187:  test.serial(`can concatenate ${printableArg} [spawn]`,
node-puka-1.0.1+dfsg/src/sh.test.js-188-    ignoreLineBreakErrors(t =>
node-puka-1.0.1+dfsg/src/sh.test.js:189:      tempFile(`${arg}-xxx`, file =>
node-puka-1.0.1+dfsg/src/sh.test.js-190-        t.expect(
node-puka-1.0.1+dfsg/src/sh.test.js:191:          sh`expect-arg 0 ${file} ${arg}-xxx`,
node-puka-1.0.1+dfsg/src/sh.test.js-192-          "to output to stderr satisfying", allOk(1)))));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-19-test("pipes add carets on the right", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:20:  t.expect(sh`foo | bar ${'"'}`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-21-    "to be", 'foo | bar ^^^^^^^"\\^^^^^^^"^^^^^^^"'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-23-test("pipes add carets on the left", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:24:  t.expect(sh`foo ${'"'} | bar`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-25-    "to be", 'foo ^^^^^^^"\\^^^^^^^"^^^^^^^" | bar'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-27-test("more pipes add more carets", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:28:  t.expect(sh`foo | (bar | baz ${'"'})`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-29-    "to be",
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-32-test("unquoted pipes count", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:33:  t.expect(sh`foo ${unquoted('|')} bar ${'"'}`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-34-    "to be", 'foo | bar ^^^^^^^"\\^^^^^^^"^^^^^^^"'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-36-test("careted pipes don't count", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:37:  t.expect(sh`foo ${unquoted('^|')} bar ${'"'}`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-38-    "to be", 'foo ^| bar ^^^"\\^^^"^^^"'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-40-test("quoted pipes don't count", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:41:  t.expect(sh`foo ${unquoted('"> | <"')} bar ${'"'}`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-42-    "to be", 'foo "> | <" bar ^^^"\\^^^"^^^"'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-44-test("sequence operators don't count", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:45:  t.expect(sh`foo || bar ${'"'}`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-46-    "to be", 'foo || bar ^^^"\\^^^"^^^"'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-48-test("unmatched parentheses don't ruin everything", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:49:  t.expect(sh`foo | bar); baz ${'"'}`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-50-    "to be", 'foo | bar)& baz ^^^"\\^^^"^^^"'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-52-test("redirects count", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:53:  t.expect(sh`foo | (bar > ${'%'} | baz)`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-54-    "to be", 'foo | (bar > ^^^^^^^% | baz)'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-72-test("placeholder paths that need escaping get carets", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:73:  t.expect(sh`${'C:\\example%\\example.bat'} %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-74-    "to be", 'C:\\example^%\\example.bat ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-76-test("placeholder arguments don't affect argument escaping", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:77:  t.expect(sh`foo % ${'%'} %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-78-    "to be", 'foo ^^^% ^^^% ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-80-test("placeholder word parts don't affect argument escaping", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:81:  t.expect(sh`foo%${['x', 'y']}% %${'z'}%`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-82-    "to be", 'foo^%x^% foo^^^%y^^^% ^^^%z^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-84-test("placeholder pipes do affect argument escaping", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:85:  t.expect(sh`foo % ${unquoted('|')} %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-86-    "to be", 'foo ^^^^^^^% | ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-88-test("placeholder redirects do affect argument escaping", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:89:  t.expect(sh`foo % ${unquoted('>')} %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-90-    "to be", 'foo ^^^% > ^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-92-test("placeholder redirects, multiple outputs, and argument escaping", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:93:  t.expect(sh`foo % ${unquoted('>')}${['%', '%%']} %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-94-    "to be", 'foo ^^^% >^% >^%^% ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-100-test("redirects to placeholders that start the command", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:101:  t.expect(sh`> ${'%'} C:\\example%\\example.bat %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-102-    "to be", '> ^% C:\\example^%\\example.bat ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-104-test("placeholder redirects that start the command", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:105:  t.expect(sh`${unquoted('>')} % C:\\example%\\example.bat %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-106-    "to be", '> ^% C:\\example^%\\example.bat ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-108-test("placeholder partial redirects that start the command", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:109:  t.expect(sh`${unquoted('> foo')}% C:\\example%\\example.bat %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-110-    "to be", '> foo^% C:\\example^%\\example.bat ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-112-test("placeholder completed redirects that start the command", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:113:  t.expect(sh`${unquoted('> foo')} C:\\example%\\example.bat %`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-114-    "to be", '> foo C:\\example^%\\example.bat ^^^%'));
##############################################
node-puka-1.0.1+dfsg/src/sh.win32.test.js-116-test("placeholder completed redirects with command", t =>
node-puka-1.0.1+dfsg/src/sh.win32.test.js:117:  t.expect(sh`${unquoted('> foo script')} C:\\example%\\example.bat`,
node-puka-1.0.1+dfsg/src/sh.win32.test.js-118-    "to be", '> foo script C:\\example^^^%\\example.bat'));
##############################################
node-puka-1.0.1+dfsg/src/unquoted.js-14- * const both = true;
node-puka-1.0.1+dfsg/src/unquoted.js:15: * sh`foo ${unquoted(both ? '&&' : '||')} bar`; // => 'foo && bar'
node-puka-1.0.1+dfsg/src/unquoted.js-16- */
##############################################
node-puka-1.0.1+dfsg/test/doc-check.js-14-vm.runInContext(
node-puka-1.0.1+dfsg/test/doc-check.js:15:  `exports = require(${JSON.stringify(path.resolve('.'))})`,
node-puka-1.0.1+dfsg/test/doc-check.js-16-  packageContext);
##############################################
node-puka-1.0.1+dfsg/test/doc-check.js-98-  for (const example of exampleGroup) {
node-puka-1.0.1+dfsg/test/doc-check.js:99:    test(`[example ${i++}]`, t => {
node-puka-1.0.1+dfsg/test/doc-check.js-100-      if (example instanceof Error) {