大家好,我遇到一个郁闷问题,紧急求助
环境:sunM3000 Solaris10系统 JDK1.5
根目录下创建/work文件夹,下包含test.sh test2.sh
脚本如下:
test.sh
##
cd /work
touch aa.log
export aa=123456
./test2.sh
touch bb.log
----------------------
test2.sh
##
cd /work
touch cc.log
----------------------
直接使用ssh调用test.sh,可执行,看到aa.log和bb.log(注意:没有cc.log)
问题1:为什么直接执行没调用test2.sh
问题2:使用java标准调用test.sh(Runtime.getRuntime().exec({"bin/sh","-c","./work/test.sh"})),只能看到aa.log创建,卡在export命令上了
问题3:如果注释掉代码"#export aa=123456",会输出aa.log和bb.log,但test2.sh里面的代码未被执行请各位大侠帮忙,在线等!!!
环境:sunM3000 Solaris10系统 JDK1.5
根目录下创建/work文件夹,下包含test.sh test2.sh
脚本如下:
test.sh
##
cd /work
touch aa.log
export aa=123456
./test2.sh
touch bb.log
----------------------
test2.sh
##
cd /work
touch cc.log
----------------------
直接使用ssh调用test.sh,可执行,看到aa.log和bb.log(注意:没有cc.log)
问题1:为什么直接执行没调用test2.sh
问题2:使用java标准调用test.sh(Runtime.getRuntime().exec({"bin/sh","-c","./work/test.sh"})),只能看到aa.log创建,卡在export命令上了
问题3:如果注释掉代码"#export aa=123456",会输出aa.log和bb.log,但test2.sh里面的代码未被执行请各位大侠帮忙,在线等!!!
问题是这样的,在bin/sh下不支持写法:
export aa=123456
应该换成以下写法:
aa=123456
export aa
所以对于java调用代码有两种解决方式:
1 使用/bin/bash调用
2 把sh里面的写法改称sh支持的写法还有关于不能调用子sh的问题,我的例子举的不符合实际情况,大家不用看了,其实我是在子sh里使用su - 用户 -c "全路径/test2.sh"的方式调用的test2 ,估计在切换用户的时候会自动使用/bin/sh去执行,test2里面其实还有export命令,一样过不去,所以,几个问题是一个问题,请大家以后直接使用sh标准写法,就不会有问题了