From 216b19894f76b14d164c4c5a68f05a51b06336c4 Mon Sep 17 00:00:00 2001 From: Lasse Koskela Date: Sun, 29 Jan 2023 10:42:40 +0200 Subject: [PATCH] [New] `parse`: Add syntax support for duplicating input file descriptors --- parse.js | 2 +- test/op.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/parse.js b/parse.js index 3ea9c1b..f4c46a7 100644 --- a/parse.js +++ b/parse.js @@ -3,7 +3,7 @@ // '<(' is process substitution operator and // can be parsed the same as control operator var CONTROL = '(?:' + [ - '\\|\\|', '\\&\\&', ';;', '\\|\\&', '\\<\\(', '>>', '>\\&', '[&;()|<>]' + '\\|\\|', '\\&\\&', ';;', '\\|\\&', '\\<\\(', '>>', '>\\&', '<\\&', '[&;()|<>]' ].join('|') + ')'; var META = '|&;()<> \\t'; var BAREWORD = '(\\\\[\'"' + META + ']|[^\\s\'"' + META + '])+'; diff --git a/test/op.js b/test/op.js index 5fdce9e..d665f11 100644 --- a/test/op.js +++ b/test/op.js @@ -69,6 +69,19 @@ test('double operators', function (t) { t.end(); }); +test('duplicating input file descriptors', function (t) { + // duplicating stdout to file descriptor 3 + t.same(parse('beep 3<&1'), ['beep', '3', { op: '<&' }, '1']); + + // duplicating stdout to file descriptor 0, i.e. stdin + t.same(parse('beep <&1'), ['beep', { op: '<&' }, '1']); + + // closes stdin + t.same(parse('beep <&-'), ['beep', { op: '<&' }, '-']); + + t.end(); +}); + test('glob patterns', function (t) { t.same( parse('tap test/*.test.js'),