static char *varname;
static size_t vnlen;
-static char const shortopts[] = "+C:iS:u:v0 \t-";
+static char const shortopts[] = "+C:iS:u:v0 \t";
static struct option const longopts[] =
{
break;
case ' ':
case '\t':
- case '-':
/* Space,tab,dash are undocumented options. Attempt to detect
incorrect shebang usage with extraneous space, e.g.:
#!/usr/bin/env -i command
In which case argv[1] == "-i command". */
error (0, 0, _("invalid option -- '%c'"), optc);
- if (argc == 3)
- error (0, 0, _("use -[v]S to pass options in shebang lines"));
+ error (0, 0, _("use -[v]S to pass options in shebang lines"));
usage (EXIT_CANCELED);
case_GETOPT_HELP_CHAR;
int exit_status = errno == ENOENT ? EXIT_ENOENT : EXIT_CANNOT_INVOKE;
error (0, errno, "%s", quote (argv[optind]));
- if (argc == 3 && exit_status == EXIT_ENOENT && strchr (argv[optind], ' '))
+ if (exit_status == EXIT_ENOENT && strchr (argv[optind], ' '))
error (0, 0, _("use -[v]S to pass options in shebang lines"));
return exit_status;
{ERR=>"$prog: only \${VARNAME} expansion is supported, " .
"error at: \${9B}\n"}],
- # Test incorrect shebang usage (extraneous sapce).
- # With anything other than 3 args report invalid options (as before).
- ['err_sp1', q['-v-S cat -n'], {EXIT=>125},
- {ERR=>"env: invalid option -- '-'\n" .
- "Try 'env --help' for more information.\n"}],
+ # Test incorrect shebang usage (extraneous whitespace).
['err_sp2', q['-v -S cat -n'], {EXIT=>125},
{ERR=>"env: invalid option -- ' '\n" .
+ "env: use -[v]S to pass options in shebang lines\n" .
"Try 'env --help' for more information.\n"}],
['err_sp3', q['-v -S cat -n'], {EXIT=>125}, # embedded tab after -v
{ERR=>"env: invalid option -- '\t'\n" .
+ "env: use -[v]S to pass options in shebang lines\n" .
"Try 'env --help' for more information.\n"}],
- # With exactly 3 args, assume it's incorrect shebang usage,
- # and report a different message. This typically happens with:
+ # Also diagnose incorrect shebang usage when failing to exec.
+ # This typically happens with:
#
# $ cat xxx
# #!env -v -S cat -n
# argv[0] = env
# argv[1] = '-v -S cat -n'
# argv[2] = './xxx'
- ['err_sp5', q['-v -S cat -n' ./xxx], {EXIT=>125},
- {ERR=>"env: invalid option -- ' '\n" .
- "env: use -[v]S to pass options in shebang lines\n" .
- "Try 'env --help' for more information.\n"}],
+ ['err_sp5', q['cat -n' ./xxx], {EXIT=>127},
+ {ERR=>"env: 'cat -n': No such file or directory\n" .
+ "env: use -[v]S to pass options in shebang lines\n"}],
- ['err_sp6', q['cat -n' ./xxx], {EXIT=>127},
+ ['err_sp6', q['cat -n' ./xxx arg], {EXIT=>127},
{ERR=>"env: 'cat -n': No such file or directory\n" .
"env: use -[v]S to pass options in shebang lines\n"}],
);