zsh-workers
 help / color / mirror / code / Atom feed
* [patch] "which"-builtin writes diagnostics to stdout
@ 2015-08-30  3:06 Timo Buhrmester
  2015-08-30  5:15 ` Bart Schaefer
  0 siblings, 1 reply; 11+ messages in thread
From: Timo Buhrmester @ 2015-08-30  3:06 UTC (permalink / raw)
  To: zsh-workers

[-- Attachment #1: Type: text/plain, Size: 1416 bytes --]

When invoking the `which` builtin for something that does not exist, like:

| % which doesnotexist
| doesnotexist not found

the "doesnotexist not found" message goes to standard output, rather than standard error.

This is of course wrong, and particularly nasty in command-substitution, where the diagnostic message might end up in a variable, be given to an external program as an arguemnt or even be be fed through a pipeline.

The below (and also attached) patch fixes that.


Cheers,

Timo Buhrmester

---------8<------------------------------------------------

diff --git a/Src/builtin.c b/Src/builtin.c
index 97022ad..774390a 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3578,8 +3578,9 @@ bin_whence(char *nam, char **argv, Options ops, int func)
 		}
 	    }
 	    if (!informed && (wd || v || csh)) {
-		zputs(*argv, stdout);
-		puts(wd ? ": none" : " not found");
+		zputs(*argv, stderr);
+		fputs(wd ? ": none" : " not found", stderr);
+		fputc('\n', stderr);
 		returnval = 1;
 	    }
 	    popheap();
@@ -3598,8 +3599,11 @@ bin_whence(char *nam, char **argv, Options ops, int func)
 	    informed = 1;
 	} else {
 	    /* Not found at all. */
-	    if (v || csh || wd)
-		zputs(*argv, stdout), puts(wd ? ": none" : " not found");
+	    if (v || csh || wd) {
+		zputs(*argv, stderr);
+		fputs(wd ? ": none" : " not found", stderr);
+		fputc('\n', stderr);
+	    }
 	    returnval = 1;
 	}
     }

[-- Attachment #2: zsh-which-stderr.patch --]
[-- Type: text/plain, Size: 847 bytes --]

diff --git a/Src/builtin.c b/Src/builtin.c
index 97022ad..774390a 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -3578,8 +3578,9 @@ bin_whence(char *nam, char **argv, Options ops, int func)
 		}
 	    }
 	    if (!informed && (wd || v || csh)) {
-		zputs(*argv, stdout);
-		puts(wd ? ": none" : " not found");
+		zputs(*argv, stderr);
+		fputs(wd ? ": none" : " not found", stderr);
+		fputc('\n', stderr);
 		returnval = 1;
 	    }
 	    popheap();
@@ -3598,8 +3599,11 @@ bin_whence(char *nam, char **argv, Options ops, int func)
 	    informed = 1;
 	} else {
 	    /* Not found at all. */
-	    if (v || csh || wd)
-		zputs(*argv, stdout), puts(wd ? ": none" : " not found");
+	    if (v || csh || wd) {
+		zputs(*argv, stderr);
+		fputs(wd ? ": none" : " not found", stderr);
+		fputc('\n', stderr);
+	    }
 	    returnval = 1;
 	}
     }

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2015-09-02 14:00 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-08-30  3:06 [patch] "which"-builtin writes diagnostics to stdout Timo Buhrmester
2015-08-30  5:15 ` Bart Schaefer
2015-08-30  5:26   ` Timo Buhrmester
2015-09-01  6:04     ` Bart Schaefer
2015-09-01  6:12       ` Mikael Magnusson
2015-09-01 23:16         ` Bart Schaefer
2015-09-02  8:53           ` Peter Stephenson
2015-09-02 13:48             ` Vincent Lefevre
2015-09-01 13:14       ` Timo Buhrmester
2015-09-01 13:45   ` Peter Stephenson
2015-09-01 23:10     ` Bart Schaefer

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).