【问题标题】:Not all java commands to unix shell are running并非所有到 unix shell 的 java 命令都在运行
【发布时间】:2012-06-25 20:57:36
【问题描述】:

我正在编写一个向 unix shell 发送命令的应用程序。

发出 cp 和 chmod 命令(我知道)我从来没有遇到过任何问题,但由于某种原因 mv 命令实际上不会移动我加速的文件?

我的代码可以显示如下:

    import java.io.IOException;
    public class ExecuteCommand {   
        public static void main(String[] args){
            ExecuteCommand exec = new ExecuteCommand("cp /some/directory/file.txt /some/directory/of/mine/");
            ExecuteCommand exec2 = new ExecuteCommand("chmod 666 /some/directory/of/mine/file.txt");
            ExecuteCommand exec3 = new ExecuteCommand("mv /some/directory/of/mine/file.txt /some/directory/of/mine/subDirectory/");
        }
        public ExecuteCommand(String command) {
            try {
                    System.out.println("EXECUTING!::" + command);       
                    Process child = Runtime.getRuntime().exec(command);             
            } catch (IOException e) {
            }
        }

    }

我尝试在命令之间放置计时器,但没有取得任何进展,以确保处理了 %100 的命令。

请注意,我的代码包含了示例信息,如果某些unix文件系统语法不正确,请见谅,请不要将问题归咎于此。

如果您需要任何进一步的信息,请询问,我会尽快提供

谢谢大家=)

【问题讨论】:

  • 首先,您应该在 catch 块中记录 IOExceptions(测试 e.printStackTrace() 就足够了)。其次,如果只执行mv(exec3),是否也会出现问题?
  • 不,我可以复制并粘贴从构造函数打印的命令,它工作得很好。
  • 在主程序中没有抛出异常我已经实现了这个示例??
  • 关于异常:给定您的示例程序,您甚至无法知道是否抛出了 IOException - 因为空的 catch 块。
  • 我同意,但就像我说的,这只是一个示例

标签: java unix command runtime shellexecute


【解决方案1】:

您的示例代码的一个问题是您正在压缩异常。如果有任何问题,您将丢弃证据。

第二个问题是在启动下一个命令之前,您没有等待一个命令完成。如果后一个依赖于前一个完成,它将失败。

第三个问题是您没有检查命令返回/退出代码,或者查看它们可能产生的任何错误消息。错误消息可能会告诉您为什么命令不起作用...如果您费心获取并打印它们。

最后的(元)问题是这不是您的真实代码......所以我们不知道我们看到的问题是否只是您的问题的人工制品。请提供真实的代码,而不是一些糟糕的版本。

【讨论】:

  • 注意,感谢您的建议。我不知道 Process 库中的 waitFor() 方法。我会尝试,如果问题仍然存在,那么我将求助于发布我的实际代码。感谢您在我缺乏信息的情况下尽可能地回答我的问题,我真的很感激 =)
  • waitFor() 方法就是这样做的,现在一切都运行顺利,完全符合预期。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-03
  • 2015-02-23
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多