zsh-workers
 help / color / mirror / code / Atom feed
From: Timo Buhrmester <fstd.lkml@gmail.com>
To: zsh-workers@zsh.org
Subject: [patch] "which"-builtin writes diagnostics to stdout
Date: Sun, 30 Aug 2015 05:06:14 +0200	[thread overview]
Message-ID: <20150830030614.GB18893@frozen.localdomain> (raw)

[-- 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;
 	}
     }

             reply	other threads:[~2015-08-30  3:06 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-30  3:06 Timo Buhrmester [this message]
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

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150830030614.GB18893@frozen.localdomain \
    --to=fstd.lkml@gmail.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).