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服务器上,还是会遇到相同的问题的,还好我现在发现了解决方案。

你可能感兴趣的:(java 调用shell脚本遇到的问题(mac))