Java IOException冒险
我让我的java进程(在我的系统中)尝试与一个shell脚本(details1.sh)对话,该脚本位于远程系统的/tmp目录中(当然这两个系统是连接的)。但我得到了这个例外- java.io.IOException:无法运行程序“/tmp/details1.sh”:java.io.IOException:错误=2,没有这样的文件或目录 我也将权限更改为777 但我不知道如何度过这一关。Java IOException冒险,java,linux,ioexception,shell,Java,Linux,Ioexception,Shell,我让我的java进程(在我的系统中)尝试与一个shell脚本(details1.sh)对话,该脚本位于远程系统的/tmp目录中(当然这两个系统是连接的)。但我得到了这个例外- java.io.IOException:无法运行程序“/tmp/details1.sh”:java.io.IOException:错误=2,没有这样的文件或目录 我也将权限更改为777 但我不知道如何度过这一关。 有什么想法吗?您可能应该直接调用shell(例如,/bin/bash),将要执行的脚本作为文件名传递 编辑:根
有什么想法吗?您可能应该直接调用shell(例如,
/bin/bash
),将要执行的脚本作为文件名传递
编辑:根据评论,这可能不是问题——但这肯定是我首先要尝试的
另一个编辑:您似乎试图运行
/tmp/details1.sh
,但您说它位于远程系统的/tmp
目录中。显然,如果您尝试只运行/tmp/details1.sh
,它将在本地/tmp
目录中查找。。。您希望it部门如何了解远程系统?您所说的这两个系统已连接是什么意思?IOException命令可以告诉您在本地/tmp
中找不到details1.sh
。如果远程系统的根(/
)安装在/mount/remote\u sys
中,则应运行/mount/remote\u sys/tmp/details1.sh
。在C和Linux中,stdlib的system
函数使用/bin/sh
调用该命令。当然,Java对于如何使用Runtime.exec
运行命令并没有那么具体,但我希望与C中的情况一样。@jfgagne:老实说,我不确定我对这两种方式都有什么期望。。。但我认为至少值得一试。@jfgagne您没有证据证明Java调用system()。事实上,它调用了exec()家族中的一个。就像system()实际上一样。@EJP:True,我没有证据证明Java调用了system()
。但是Linux人说,system()
调用/bin/sh-c
来执行它的命令。我没有Windoze手册,但我认为(正如Jon所说的,预期是误导性的)是使用cmd
或另一个命令解释器来执行system()
命令。虽然Linuxsystem()
可能使用了fork()
/exec()
/wait()
,但在Linux中由system()
的exec运行的二进制文件是/bin/sh
。最后,Linux人说exec
函数族是函数execve的前端,执行者说它的文件名必须是二进制文件或以#开头的脚本代码>。