2017-01-24 22 views
2

Команда javac имеет странное заполнение вкладки с -cp и -classpath. Я был под впечатлением -cp был псевдоним для -classpath. Однако, когда я нажимаю вкладку после флага -classpath, я получаю файлы .jar, как и ожидалось. Когда я нажимаю вкладку с -classpath я получаю:Strange javac Завершение вкладки для 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 .: 

Я использую Баш в Ubuntu 16. 04 и javac 1.8.0_111, если это необходимо.

ответ

3

Эта функциональность реализована пакетом 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 (.bashrc или .bash_profile и т. д.). Затем, когда вы начинаете новую оболочку, новый _javac() будет использоваться для выполнения команд javac.

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


Update: Это сейчас в источнике fixed.