Вкладка странное завершение javac и на пути к классу


Команда javac имеет странное завершение вкладки с -cp и -classpath. У меня сложилось впечатление, что -cp - это псевдоним -classpath. Однако, когда я нажимаю tab после флага -classpath, я получаю файлы .jar, как и ожидалось. Когда я нажимаю tab с -classpath, я получаю:

javac -classpath <tab>
javac -classpath lib/ <tab>
javac -classpath lib/test.jar

И

javac -classpath .: <tab>
javac -classpath .:lib/ <tab>
javac -classpath .:lib/test.jar

Альтернативно, с -cp

javac -cp <tab>
javac -cp lib/ <tab>
javac -cp lib/

И

javac -cp .: <tab>
javac -cp .:

Я использую bash в ubuntu 16.04 и javac 1.8.0_111, если это уместно.

1 2

1 ответ:

Эта функциональность реализована пакетом bash-completion. Вы можете найти код для соответствующей функции следующим образом:

$ complete -p javac
complete -F _javac javac  # the function `_javac' is used to complete the command `javac'
$ declare -f _javac .     # this will print the function code

Там вы увидите, что соответствующий код:

case $prev in
    ...
    -classpath|-bootclasspath|-sourcepath|-extdirs)
    ...
Таким образом, если вы хотите, вы можете взять полное определение _javac() из команды declare -f, изменить его, чтобы включить -cp в этот оператор case, и добавить его в конец вашего файла bash init (.bashrc или .bash_profile и т. д.). Затем, когда вы запускаете новую оболочку, новая _javac() будет использоваться для завершения javac команды.

Кроме того, код для последнего выпуска также доступен для просмотра наgithub . Другие завершения команды, определенные там (java, javadoc) поймите флаги короткой руки, поэтому я уверен, что запрос на вытягивание с исправлением этой проблемы будет приветствоваться.


обновление: теперь этоисправлено в исходном коде.