Chinaunix

标题: 求救关于shell执行脚本 [打印本页]

作者: alex'yang    时间: 2008-06-13 18:09
标题: 求救关于shell执行脚本
小弟我写了个shell脚本,a.sh内容如下:

#!/bin/sh
echo "hello" > /etc/text.conf

在freebsd下命令行直接执行没有问题,可以正常的生成一个etc/text.conf文件,
但我用java线程Runtime.getRuntime().exec(“a.sh”)死活不能生成etc/text.conf,通过日志查看脚本还是执行的
哪位大侠知道这是为什么?
作者: err7dd    时间: 2008-06-13 22:37
权限问题吧
作者: 轩静天    时间: 2008-06-13 22:38
带上绝对路径试试,可能JAVA调用的环境与SHELL的用户不一样吧.
作者: alex'yang    时间: 2008-06-15 13:05
标题: 回复 #2 err7dd 的帖子
我把/etc 的权限改为777了,也不行
chmod -R 777 /etc
作者: alex'yang    时间: 2008-06-15 13:12
原帖由 轩静天 于 2008-6-13 22:38 发表
带上绝对路径试试,可能JAVA调用的环境与SHELL的用户不一样吧.


/etc/text.conf 这就是绝对路径呀,我把tomcat安装在/root目录下了,我不清楚tomcat在调用执行脚本时是以什么用户执行的?
作者: wstar    时间: 2008-06-16 09:37
你用touch看能不能生成文件?
作者: alex'yang    时间: 2008-06-16 10:00
原帖由 wstar 于 2008-6-16 09:37 发表
你用touch看能不能生成文件?


生成不了
作者: Jae_Cheung    时间: 2008-06-26 02:32
Hi, LZ!
首先,shell 脚本不是真正的可执行程序,只不过你给它设置了可执行权限罢了。
在终端下能直接运行,那完全要受益于 shell 终端环境本身。它会根据你 shell
脚本里第一行指定的 shell 程序(比如,/bin/sh)来解释执行该脚本。很多其他
解释型语言也是如此。所以你要做的就是:
Runtime.getRuntime().exec("/bin/sh a.sh")

另外,对于执行 Runtime.getRuntime().exec("command") 将看不到控制台
输出(如果有信息输出的话),具体原因及解决见:
http://bbs.chinaunix.net/thread-148099-1-1.html 问题19。
作者: Jae_Cheung    时间: 2008-06-26 03:23
Sorry, LZ!
上面我说的不对,抱歉。
Runtime.getRuntime().exec("a.sh") 与 Runtime.getRuntime().exec("/bin/sh a.sh")
没区别,不是这个问题。

那么我猜,可能是没找到 a.sh 文件,就像在 Eclipse 中的默认当前目录是 project 的根
目录,那么除非你把 a.sh 放在 project 目录下,否则肯定找不到。Tomcat 也有类似当
前工作目录,所以楼上那位说的对,绝对路径,是 a.sh 写成绝对路径。不过 Tomcat
下用的上下文路径也是“/”开头的,不知道它怎么区别二者,你都试试吧。。。
作者: chunyv    时间: 2008-06-26 10:25
用全路径试试!
作者: 古道西风    时间: 2008-07-01 10:25
输入a.sh的全路径




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2