javac命令使用-cp
和-classpath
完成了奇怪的标签。我的印象是-cp
是-classpath
的别名。但是,当我在-classpath
标志后按Tab键时,我会按预期获得.jar
个文件。当我用-classpath
按Tab键时,我得到:
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中使用bash,如果这是相关的。
答案 0 :(得分: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 init文件的 end (.bashrc
或.bash_profile
等)。然后,当您启动新shell时,新的_javac()
将用于完成javac
命令。
此外,最新版本的代码也可在github上查看。那里定义的其他命令完成(java
,javadoc
)理解简写标志,所以我确信一个针对此问题修复的pull请求将是受欢迎的。
更新:源代码现在为fixed。