如何编写Bash脚本切换目录后执行mvn命令启动Java Maven项目
Bash脚本切换目录执行Maven命令的解决方案
错误原因
exec命令的作用是将当前shell进程替换为指定的外部可执行程序,而cd是Bash内置命令,不属于独立的外部二进制文件,因此exec cd会直接抛出not found错误。- 拆分写法的问题在于未校验
cd的执行结果:如果cd因路径不存在、权限不足等原因执行失败,后续命令仍会在脚本原始工作目录下运行,自然找不到Maven项目。
正确实现
基础写法(推荐)
#!/bin/bash # 切换到目标目录,切换失败直接退出脚本 cd /var/script/myproject/java || exit 1 # 直接执行Maven命令 mvn exec:java
保留exec的写法
如果需要用exec将shell进程替换为Maven进程(方便信号传递、进程管理等场景),使用如下写法:
#!/bin/bash cd /var/script/myproject/java || exit 1 exec mvn exec:java
说明
- 脚本开头的
#!/bin/bash用于指定解释器,避免默认用不兼容的shell执行脚本 || exit 1逻辑保证cd执行失败时直接终止脚本,不会在错误目录执行后续操作cd是在当前shell进程内执行的,切换成功后脚本的工作目录就会变为目标路径,后续所有命令都会在该目录下运行
注意事项
- 确认
/var/script/myproject/java路径真实存在,且运行脚本的用户对该路径有可读、可执行权限 - 若执行时提示找不到
mvn命令,可以替换为mvn的绝对路径,例如/usr/bin/mvn exec:java
内容的提问来源于stack exchange,提问作者A. Vreeswijk
相关产品推荐
相关产品推荐

