-
-
Notifications
You must be signed in to change notification settings - Fork 163
Diversity in Command Line Syntax
(Back to Shell Autocompletion)
Here I'm picking the worst cases. My point is not that we have to handle them -- it's that a grammar shouldn't prevent you from handling these cases.
The long options have to appear BEFORE the short options.
Usage: bash [GNU long option] [option] ...
bash --posix -x --<TAB>
-- This should not complete any long options!
set +oeu pipefail
is equivalent to
set +o pipefail +e +u
(try it in bash)
When I type set +oeu <TAB>
-- I should complete pipefail
and not an arg.
That is, some flags can be prefixed with +
in addition to -
.
find . -type f -<TAB>
-- what is valid in that case? How do you write a grammar for it?
In expr
, +
can be the binary arithmetic operator, or it can be escaping !!
NOTE: If the standard is bash-style completions, then you don't really need to complete anything for expr
. However, test
should know where filenames are valid.
See also: Problems With the test Builtin: What Does -a Mean?
-strflag str
is allowed, but -boolflag 0
isn't allowed. Must be -boolflag=0
for negation, or -boolflag
/ -boolflag=1
when it's true.
python -c -s <TAB>
--
python -c x -s <TAB>
--
-s
is not a flag; it's an argument, because -c
terminates flag parsing.
zsh seems to get this right. (bash doesn't complete flags at all, so it doesn't apply.)
It doesn't respect --
according to POSIX. Maybe this is easy to express?