[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH] command-not-found-handle
From: |
Ken Irving |
Subject: |
Re: [PATCH] command-not-found-handle |
Date: |
Wed, 9 Apr 2008 13:10:19 -0800 |
User-agent: |
Mutt/1.5.17+20080114 (2008-01-14) |
On Sun, Apr 04, 2004 at 05:23:36PM +0200, Michael Vogt wrote:
> Dear Friends,
> I attached a small patch that adds a "command-not-found-handle" for
> bash 2.05b.0(1)-release. If a given command is not found and the
> function "command-not-found-handle" is definied, it is called with the
> faild comand as parameter. If it's not defined the behaviour is
> unchanged.
>
> Please tell me what you think about the patch and if there is a chance
> for it to get integrated into bash. See [1] for some rational why this
> might be usefull.
>
> thanks,
> Michael
>
> [1] http://www.geocrawler.com/mail/msg.php3?msg_id=2795796&list=342
This patch (or very similar) was accepted into debian's bash some time
ago, though apparently not upstream. I'm interested in extending this
patch to include the command arguments; currently only the command
string itself is passed to the "hook" function.
In the patch, shell variables f and v are declared, but v is not used;
my guess is that that may have been intended for the argument list, but
for some reason was dropped. I haven't yet figured out how to make this
work, but will keep trying...
The referenced link [1] to some rational hasn't aged well, and I'd be
interested in seeing any discussions of this feature.
My interest is to "extend" bash to support object oriented commands,
which I currently have to explicitly run through a handler; e.g., to use:
$ object.do_something args...
instead of:
$ tob object.do_something args...
where the tob script parses object and method, resolves the method to
some executable via path-like information associated with the object,
and then executes the equivalent of
$ $class_path/do_something object args...
I think this should be relatively safe, since there are probably few
executables which include a dot in their name.
Finally, I thought it should be possible to find the command line with
arguments under /proc/$pid, but no joy there either; if that was the
case, the command_not_found_handle function could perhaps reconstruct
the full command in order to pass to the tob handler. I'm running debian
stable and unstable systems, e.g.,
$ uname -a
Linux hayes 2.6.18-4-686 #1 SMP Wed May 9 23:03:12 UTC 2007 i686 GNU/Linux
Thanks for any thoughts, ridicule, etc., on this.
Ken
> --- execute_cmd.c.orig 2004-04-04 15:40:18.000000000 +0200
> +++ execute_cmd.c 2004-04-04 16:41:33.000000000 +0200
> @@ -3270,8 +3270,23 @@
>
> if (command == 0)
> {
> - internal_error ("%s: command not found", pathname);
> - exit (EX_NOTFOUND); /* Posix.2 says the exit status is 127 */
> + SHELL_VAR *f, *v;
> + WORD_LIST *cmdlist;
> + WORD_DESC *w;
> + int fval;
> + f = find_function ("command-not-found-handle");
> + if (f == 0) {
> + internal_error ("%s: command not found", pathname);
> + exit (EX_NOTFOUND); /* Posix.2 says the exit status is 127
> */
> + }
> + w = make_word("command-not-found-handle");
> + cmdlist = make_word_list(w, (WORD_LIST*)NULL);
> +
> + w = make_word(pathname);
> + cmdlist->next = make_word_list(w, (WORD_LIST*)NULL);
> +
> + fval = execute_shell_function (f, cmdlist);
> + exit(fval);
> }
>
> /* Execve expects the command name to be in args[0]. So we
--
Ken Irving, fnkci@uaf.edu, http://sourceforge.net/projects/thinobject/
Hi=~/lib/thinob/Try/Hi; mkdir -p $Hi; ln -s /usr/local/lib/thinob $Hi/^
hi=$(tob Try/Hi.tob hi); echo -e '#!/bin/sh\nshift\necho Hello $*!'>$hi
chmod +x $hi; mkdir say; ln -s $Hi say/^; tob say.hi world
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- Re: [PATCH] command-not-found-handle,
Ken Irving <=