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(如果相关)。
最佳答案
此功能由 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)
...
因此,如果您愿意,您可以从 declare -f
命令获取 _javac()
的整个定义,并将其修改为包含 -cp
在该 case
语句中,并将其附加到 bash 初始化文件的末尾(.bashrc
或 .bash_profile
等)。然后,当您启动新的 shell 时,新的 _javac()
将用于完成 javac
命令。
此外,最新版本的代码也可以在 github 上查看。 。那里定义的其他命令完成(java
、javadoc
)了解简写标志,因此我确信修复此问题的拉取请求将受到欢迎。
更新:现在是 fixed在源代码中。
关于bash - 类路径的奇怪 javac Tab 补全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41820102/