diff options
Diffstat (limited to 'execute_cmd.c')
-rw-r--r-- | execute_cmd.c | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/execute_cmd.c b/execute_cmd.c index ce90d25..9162f3e 100644 --- a/execute_cmd.c +++ b/execute_cmd.c @@ -3638,8 +3638,26 @@ execute_disk_command (words, redirects, command_line, pipe_in, pipe_out, 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 |