diff options
Diffstat (limited to 'SOURCES/command-not-found.patch')
-rw-r--r-- | SOURCES/command-not-found.patch | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/SOURCES/command-not-found.patch b/SOURCES/command-not-found.patch new file mode 100644 index 0000000..80a016d --- /dev/null +++ b/SOURCES/command-not-found.patch @@ -0,0 +1,63 @@ +--- doc/bash.1 ++++ doc/bash.1 +@@ -2035,6 +2035,13 @@ + be a prefix of a stopped job's name; this provides functionality + analogous to the \fB%\fP\fIstring\fP job identifier. + .TP ++.B command_not_found_handle ++The name of a shell function to be called if a command cannot be ++found. The return value of this function should be 0, if the command ++is available after execution of the function, otherwise 127 (EX_NOTFOUND). ++Enabled only in interactive, non POSIX mode shells. This is a Debian ++extension. ++.TP + .B histchars + The two or three characters which control history expansion + and tokenization (see +--- doc/bashref.texi ++++ doc/bashref.texi +@@ -4809,6 +4809,13 @@ + @item UID + The numeric real user id of the current user. This variable is readonly. + ++@item command_not_found_handle ++The name of a shell function to be called if a command cannot be ++found. The return value of this function should be 0, if the command ++is available after execution of the function, otherwise 127 (EX_NOTFOUND). ++Enabled only in interactive, non POSIX mode shells. This is a Debian ++extension. ++ + @end vtable + + @node Bash Features +--- execute_cmd.c ++++ execute_cmd.c +@@ -3722,8 +3722,26 @@ + + 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; ++ if( (posixly_correct || interactive_shell == 0) || ++ (f = find_function ("command_not_found_handle")) == 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); ++ if (fval == EX_NOTFOUND) ++ internal_error (_("%s: command not found"), pathname); ++ exit(fval); + } + + /* Execve expects the command name to be in args[0]. So we |