Вкладка странное завершение 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 ответ:
Эта функциональность реализована пакетом
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
) поймите флаги короткой руки, поэтому я уверен, что запрос на вытягивание с исправлением этой проблемы будет приветствоваться.
обновление: теперь этоисправлено в исходном коде.