0

我想知道一种能够拦截 shell 命令的方法

当我运行一个命令来编译一个java程序时

javac xxx.java

我希望 shell 执行一组程序,这些程序将在编译之前通过运行一组其他命令来检测 xxx.java 文件。

./instrument xxx.java

只有在此之后,必须调用 JVM 进行编译。是否可以在 shell 中拦截命令,如果不能,我怎么能在系统用户不知道他的代码被检测的情况下实现它???

4

2 回答 2

3

听起来你想要一个构建工具。 Maven是一个很好的选择,还有很多其他的很好的选择(antgradle、make 等)。构建工具允许您将一系列复杂的操作联系在一起以生成最终工件,而无需每次都指定这些步骤。

于 2013-02-22T17:16:31.810 回答
0

取决于您对问题的解释。听起来你想偷偷摸摸,而不是使用 Maven 构建,所以就这样吧。

你想要的是拦截并运行同名的程序版本。基本上你需要创建一个名为

爪哇

它采用与真正的 javac 完全相同的参数。然后在您的程序中,您可以在文件上运行所需的任何工具作为参数。最后,您可以通过在 JAVA_HOME 或保存原始 java bin 目录路径的任何环境变量中进行查找来调用真正的 javac。

为了让您的 javac 版本优先,您需要将它添加到 PATH 环境变量的 HEAD 中。这将确保首先检查程序名称。在linux中,这样做

PATH=/usr/myPrograms/java/bin:$PATH

注意:如果用户明确键入 javac 的绝对完整路径,此解决方案将不起作用

于 2013-02-22T17:20:24.477 回答