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
next prev 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).