我想知道一种能够拦截 shell 命令的方法
当我运行一个命令来编译一个java程序时
javac xxx.java
我希望 shell 执行一组程序,这些程序将在编译之前通过运行一组其他命令来检测 xxx.java 文件。
./instrument xxx.java
只有在此之后,必须调用 JVM 进行编译。是否可以在 shell 中拦截命令,如果不能,我怎么能在系统用户不知道他的代码被检测的情况下实现它???
取决于您对问题的解释。听起来你想偷偷摸摸,而不是使用 Maven 构建,所以就这样吧。
你想要的是拦截并运行同名的程序版本。基本上你需要创建一个名为
爪哇
它采用与真正的 javac 完全相同的参数。然后在您的程序中,您可以在文件上运行所需的任何工具作为参数。最后,您可以通过在 JAVA_HOME 或保存原始 java bin 目录路径的任何环境变量中进行查找来调用真正的 javac。
为了让您的 javac 版本优先,您需要将它添加到 PATH 环境变量的 HEAD 中。这将确保首先检查程序名称。在linux中,这样做
PATH=/usr/myPrograms/java/bin:$PATH
注意:如果用户明确键入 javac 的绝对完整路径,此解决方案将不起作用