<rsbecker@xxxxxxxxxxxxx> writes: > I am finding an issue with t1800.16 failing as a result of a text compare: > > -fatal: cannot run bad-hooks/test-hook: ... > +fatal: cannot exec 'bad-hooks/test-hook': Permission denied > > I don't think this is actually a failure condition but the message > text is platform and shell specific. Isn't this coming from piece of code in start_command()? /* * Attempt to exec using the command and arguments starting at * argv.argv[1]. argv.argv[0] contains SHELL_PATH which will * be used in the event exec failed with ENOEXEC at which point * we will try to interpret the command using 'sh'. */ execve(argv.v[1], (char *const *) argv.v + 1, (char *const *) childenv); if (errno == ENOEXEC) execve(argv.v[0], (char *const *) argv.v, (char *const *) childenv); if (errno == ENOENT) { if (cmd->silent_exec_failure) child_die(CHILD_ERR_SILENT); child_die(CHILD_ERR_ENOENT); } else { child_die(CHILD_ERR_ERRNO); } The test apparently expects CHILD_ERR_NOENT, which comes from child_err_spew() case CHILD_ERR_ENOENT: error_errno("cannot run %s", cmd->args.v[0]); break; case CHILD_ERR_SILENT: break; case CHILD_ERR_ERRNO: error_errno("cannot exec '%s'", cmd->args.v[0]); break; } but somehow your system fails the execve() with something other than ENOENT.