java 调用shell脚本遇到的问题(mac)
问题一:我想要先切换到一个目录,再在这个目录下执行一个命令
Lista=newArrayList();
a.add("cd xxx");
a.add("ls -l");
a.add("./sonar.sh start");
callShell(a);
这样写是不行的,因为这是单次事务型的,就是每次调用都是独立的事务或者说操作,没有关联的。所以还是会在当前目录下执行后续操作,不会在xxx目录下执行下面的操作
可以写一个独立的脚本,然后一次运行脚本,这样多复杂的逻辑都没问题。
问题二:在终端中直接输入可以正常运行的命令行,到java中调用shell就不可以运行了
我执行一些比如echo之类的命令都是可以正常运行的,但是执行到比如sh a.sh之类的命令总是返回值127,又不知道他的错误信息,而且一个很长的shell脚本他也不会返回是第几行错的。我搜索了很久,可能的原因是java 运行时的环境变量和系统的环境变量不一样。
直接在终端查看环境变量
但是我在java中调用shell执行 echo $PATH
得到的是这样的,少了一大段。
并不知道根本原因是不是这个,我先学习一下怎样在java 运行时环境添加环境变量。。。
以我想调用sonar-scanner为例
根据https://yq.aliyun.com/articles/2362,应该是给他来个软链接
ln -s /Users/Alisa/Documents/sonar-scanner-3.0.3.778-macosx/bin/sonar-scanner sonar-scanner
但是这个方法对我没有用,于是我突发奇想在我的shell脚本中直接使用他的全名试一试,结果成功了。
心得:本来今天一天的尝试,我都想放弃了,因为我觉得可能是我的电脑有问题,反正最后会部署到linux服务器上的,现在有问题也没关系,但是今天我觉得以后我还是可能会使用自己的电脑调用shell脚本的,迟早要解决的。所以有问题不能逃避,要正视他并解决他。通过今天的学习,我发现了,即使部署到了linux服务器上,还是会遇到相同的问题的,还好我现在发现了解决方案。