50 lines
1.9 KiB
Diff
50 lines
1.9 KiB
Diff
|
diff -up bash-3.2/config-top.h.command_not_found bash-3.2/config-top.h
|
||
|
--- bash-3.2/config-top.h.command_not_found 2008-12-04 15:45:21.000000000 +0100
|
||
|
+++ bash-3.2/config-top.h 2008-12-04 15:45:55.000000000 +0100
|
||
|
@@ -87,3 +87,7 @@
|
||
|
/* Define this if you want bash to try to check whether it's being run by
|
||
|
sshd and source the .bashrc if so (like the rshd behavior). */
|
||
|
#define SSH_SOURCE_BASHRC
|
||
|
+
|
||
|
+/* Define this if you want bash to try to find command_not_found_handler
|
||
|
+ shell function */
|
||
|
+#define COMMAND_NOT_FOUND_HANDLER
|
||
|
diff -up bash-3.2/execute_cmd.c.command_not_found bash-3.2/execute_cmd.c
|
||
|
--- bash-3.2/execute_cmd.c.command_not_found 2008-12-04 15:34:48.000000000 +0100
|
||
|
+++ bash-3.2/execute_cmd.c 2008-12-04 15:34:52.000000000 +0100
|
||
|
@@ -3737,10 +3737,33 @@ execute_disk_command (words, redirects,
|
||
|
|
||
|
if (command == 0)
|
||
|
{
|
||
|
+#if defined (COMMAND_NOT_FOUND_HANDLER)
|
||
|
+ SHELL_VAR *f, *v;
|
||
|
+ WORD_LIST *cmdlist;
|
||
|
+ WORD_DESC *w;
|
||
|
+ int fval;
|
||
|
+ if ( (posixly_correct || interactive_shell == 0) ||
|
||
|
+ ( f = find_function ("command_not_found_handler")) == 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_handler");
|
||
|
+ 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);
|
||
|
+ if (fval == EX_NOTFOUND)
|
||
|
+ internal_error (_("%s: command not found"), pathname);
|
||
|
+ exit(fval);
|
||
|
+ }
|
||
|
+#else
|
||
|
internal_error (_("%s: command not found"), pathname);
|
||
|
exit (EX_NOTFOUND); /* Posix.2 says the exit status is 127 */
|
||
|
}
|
||
|
-
|
||
|
+#endif
|
||
|
/* Execve expects the command name to be in args[0]. So we
|
||
|
leave it there, in the same format that the user used to
|
||
|
type it in. */
|