From 40c4f5ccd9a54b60cad3a3f29c6c9d32d3fbdac5 Mon Sep 17 00:00:00 2001 From: Agando Date: Tue, 27 Oct 2026 16:26:30 +0100 Subject: fix(newos4): piped grep searched the working directory instead of its input MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The stdin work in 5cf5010 fixed wc/head/tail but left grep alone, and grep's no-operand branch sweeps the cwd. Measured on v4.6.115: `cat /gdir/in.txt | grep zzz` answered `other.txt:1: zzz in a cwd file` — a file that was never piped, and `cat in.txt | grep bbb` reported the match twice (`in.txt` from the cwd sweep plus `__pipebuf__` from the injected file). - module-fs.js: when terminal._pipeInput is set and no file operand was given, grep searches the staged text and prints `: ` (stdin has no filename, as in GNU). The cwd sweep stays for a bare interactive `grep x`. - shell.js: _isPipeAware now covers only sort/cut/uniq/expand. grep/head/tail/wc read _pipeInput themselves, so injecting the __pipebuf__ file produced duplicate hits and named stdin results. Verification: - test-shell-stdin.js 20 asserts (+4 for grep: no cwd match, non-match reports none, match prints no filename, -c counts stdin). RED on HEAD: G1/G2/G3 fail with `other.txt:1: zzz in a cwd file`. - Suite 18/18 files; maintain --fix "node tests 18/18 pass". - Live v4.6.116 after `cd /gdir` (where other.txt contains zzz): `cat /gdir/in.txt | grep zzz` -> (no matches) · `| grep bbb` -> `2: bbb` · `| grep -c b` -> 1 · `| head -n 2` -> aaa,bbb · `| tail -n 1` -> ccc · `| wc -l` -> 3. Credit: the false-positive grep was reported by the stdin subagent as an aside; re-derived here against the live terminal before fixing. --- main.html | 6 +++--- modules/core/core-bundle.js | 16 ++++++++++++++++ modules/core/module-fs.js | 16 ++++++++++++++++ modules/core/module-loader.js | 2 +- modules/ext/critical-ext-bundle.js | 5 ++++- modules/ext/shell.js | 5 ++++- modules/test/test-shell-stdin.js | 27 +++++++++++++++++++++++++++ 7 files changed, 71 insertions(+), 6 deletions(-) diff --git a/main.html b/main.html index 9496a15..e32de6e 100644 --- a/main.html +++ b/main.html @@ -1349,13 +1349,13 @@ - + - + - +