我的机器上安装了Maven 3.6.3,我使用mvn
来运行它。
我在.bashrc中定义了一个别名:alias mvn3=mvn
现在我可以输入:
mvn3 dependency:copydependencies
现在,我有了一个makefile,其中包含以下命令:
dependencies:
mvn3 dependency:copydependencies
但是当我运行
make dependencies
我有以下错误:
mvn3 dependency:copy-dependencies
/bin/sh: 1: mvn3: not found
我不想改变Makefile。有什么好主意吗?
别名是交互式shell的一个特性。有很多方法可以强制解决这个问题,但到目前为止,最好的解决方案是将Makefile从您的个人交互式Bash配置中解耦。
如果您希望mvn
的命令是可重写的,一个常见的约定是为命令使用make
变量。
# you can override this with make MVN=/path/to/your/mvn or etc
MVN := mvn
dependencies:
$(MVN) dependency:copydependencies
…但在你的情况下,简单地硬编码mvn
可能是完全可以接受的,实际上是一个更好的解决方案。
如果你绝对不想改变Makefile,你可以用一个shell函数(如果你需要它,它仍然需要以某种方式加载到非交互式shell中)或一个简单的包装器来替换别名:
#!/bin/sh
exec mvn "$@"
您将此脚本保存为mvn3
,在PATH
和chmod +x
的某个目录中。(一种常见的安排是为您的个人实用程序和包装器创建$HOME/bin
,并确保您的shell配置为在交互式和非交互式shell中将此目录添加到PATH
中。)