linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jan Nieuwenhuizen <janneke@gnu.org>
To: root@chaos.analogic.com
Cc: Pavel Machek <pavel@suse.cz>,
	Erik Hensema <erik@hensema.xs4all.nl>,
	linux-kernel@vger.kernel.org, bug-bash@gnu.org
Subject: [PATCH]: print missing interpreter name [Was: Re: binfmt_script and ^M]
Date: 05 Mar 2001 15:56:54 +0100	[thread overview]
Message-ID: <m3vgpo462x.fsf@appel.lilypond.org> (raw)
In-Reply-To: <Pine.LNX.3.95.1010305083112.8719A-100000@chaos.analogic.com>
In-Reply-To: "Richard B. Johnson"'s message of "Mon, 5 Mar 2001 08:40:22 -0500 (EST)"

"Richard B. Johnson" <root@chaos.analogic.com> writes:

> So why would you even consider breaking bash as a work-around for
> a broken script?

I don't.

> Somebody must have missed the boat entirely. Unix does not, never
> has, and never will end a text line with '\r'. It's Microsoft junk
> that does that, a throwback to CP/M, a throwback to MDS/200.

Yes, we all know that, but you missed the point.  As far as this patch
goes, it's got nothing to do with the '\r'.  It's meant to get a more
informative error message from bash, if ``#!INTERPRETER'' does not
exist.  Look:

    $ cat /bin/foo.sh
    #!/foo/bar/baz
    echo bar
    $ /bin/bash -c /bin/foo.sh 
    /bin/bash: /bin/foo.sh: No such file or directory
    $ ./build/bash -c /bin/foo.sh 
    ./build/bash: /foo/bar: No such file or directory

Maybe the message could even be better, but having `/foo/bar' printed,
ie, the file that the kernel says does not exist, iso `/bin/foo.sh',
the name of the script, that certainly does exist, may help.  Possibly
both should be printed.

Greetings,
Jan.

I made a silly mistake in previous patch, sorry.

--- ../bash-2.04.orig/ChangeLog	Mon Mar  5 13:58:48 2001
+++ ./ChangeLog	Mon Mar  5 15:28:19 2001
@@ -0,0 +1,5 @@
+2001-03-05  Jan Nieuwenhuizen  <jan@netland.nl>
+
+	* execute_cmd.c (extract_hash_bang_interpreter): New function.
+	(shell_execve): More informative error message.
+
--- ../bash-2.04.orig/execute_cmd.c	Tue Jan 25 17:29:11 2000
+++ ./execute_cmd.c	Mon Mar  5 15:29:37 2001
@@ -3035,6 +3035,42 @@
     }
 }
 
+/* Look for #!INTERPRETER in file COMMAND, and return INTERPRETER . */
+static char *
+extract_hash_bang_interpreter (char *command, char buf[80])
+{
+  int fd;
+  char *interpreter;
+
+  interpreter = "";
+  fd = open (command, O_RDONLY);
+  if (fd >= 0)
+    {
+      int len;
+	      
+      len = read (fd, (char *)buf, 80);
+      close (fd);
+	      
+      if (len > 0
+	  && buf[0] == '#' && buf[1] == '!')
+	{
+	  int i;
+	  int start;
+		  
+	  for (i = 2; whitespace (buf[i]) && i < len; i++)
+	    ;
+	  
+	  for (start = i;
+	       !whitespace (buf[i]) && buf[i] != '\n' && i < len;
+	       i++)
+	    ;
+
+	  interpreter = substring ((char *)buf, start, i);
+	}
+    }
+  return interpreter;
+}
+
 /* Execute a simple command that is hopefully defined in a disk file
    somewhere.
 
@@ -3326,6 +3362,11 @@
       else
 	{
 	  errno = i;
+	  if (errno == ENOENT)
+	    {
+	      char buf[80];
+	      command = extract_hash_bang_interpreter (command, buf);
+	    }
 	  file_error (command);
 	}
       return ((i == ENOENT) ? EX_NOTFOUND : EX_NOEXEC);	/* XXX Posix.2 says that exit status is 126 */

-- 
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond - The music typesetter
http://www.xs4all.nl/~jantien       | http://www.lilypond.org


  parent reply	other threads:[~2001-03-05 14:57 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-02-27 13:03 binfmt_script and ^M Ivo Timmermans
2001-02-27 13:44 ` Alan Cox
2001-02-27 13:47   ` Ivo Timmermans
2001-02-27 13:54     ` Alan Cox
2001-02-27 14:36       ` Rogier Wolff
2001-02-28 20:10   ` Erik Hensema
2001-03-01 12:04     ` Pavel Machek
2001-03-05 13:20       ` Jan Nieuwenhuizen
2001-03-05 13:37         ` Andreas Schwab
2001-03-05 13:40         ` Richard B. Johnson
2001-03-05 14:55           ` John Kodis
2001-03-05 15:25             ` Rik van Riel
2001-03-05 15:59               ` Jeff Mcadams
2001-03-05 16:18                 ` Paul Flinders
2001-03-05 17:12                   ` Andreas Schwab
2001-03-05 19:54                     ` Paul Flinders
2001-03-05 20:09                       ` Paul Flinders
2001-03-06 10:41                       ` Andreas Schwab
2001-03-06 12:33                         ` Paul Flinders
2001-03-06 14:45                           ` Laramie Leavitt
2001-03-06 15:12                             ` Sean Hunter
2001-03-06 15:37                               ` David Weinehall
2001-03-06 21:10                                 ` Thorsten Glaser Geuer
     [not found]                                   ` <20010308130145.O20737@dev.sportingbet.com>
2001-03-09 16:52                                     ` Thorsten Glaser Geuer
2001-03-06 15:53                               ` James A. Sutherland
2001-03-07  8:29                               ` Ondrej Sury
2001-03-06 16:59                             ` Xavier Bestel
2001-03-06 18:17                           ` binfmt_script and ^M (historical note) Don Dugger
2001-03-05 18:58                   ` binfmt_script and ^M Pozsar Balazs
2001-03-05 20:39                     ` Robert Read
2001-03-05 21:05                       ` Pozsar Balazs
2001-03-05 22:34                         ` Robert Read
2001-03-06 15:14                           ` Jeff Coy
2001-03-06 18:15                             ` Peter Samuelson
2001-03-06 18:36                               ` Jeff Coy
2001-03-06 20:26                                 ` John Kodis
2001-03-06 20:43                                   ` Andreas Schwab
2001-03-06  2:18                       ` Richard B. Johnson
2001-03-05 15:50             ` Richard B. Johnson
2001-03-05 16:53               ` H. Peter Anvin
2001-03-05 21:48             ` Dr. Kelsey Hudson
2001-03-06 18:19               ` Peter Samuelson
2001-03-06 21:04                 ` Dr. Kelsey Hudson
2001-03-05 14:56           ` Jan Nieuwenhuizen [this message]
2001-03-05 15:59             ` [PATCH]: print missing interpreter name [Was: Re: binfmt_script and ^M] Richard B. Johnson
2001-03-05 20:18               ` [PATCH #3]: " Jan Nieuwenhuizen
2001-03-05 16:37           ` binfmt_script and ^M Erik Hensema
2001-03-05 22:13             ` Pavel Machek

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=m3vgpo462x.fsf@appel.lilypond.org \
    --to=janneke@gnu.org \
    --cc=bug-bash@gnu.org \
    --cc=erik@hensema.xs4all.nl \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@suse.cz \
    --cc=root@chaos.analogic.com \
    /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.
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).