如何在java程序中加载bashrc并执行命令

时间:2016-05-30 10:05:47

标签: java linux bash .bash-profile

public CGAOperationStatus downloadMetaData() {
        CGAOperationStatus retCgaOperationStatus = new CGAOperationStatus();
        try {
            createDirectoryIfNeeded("/sure/replication/metadata");
            String prepareRsyncCommand = "gsutil -m rsync -d -r gs://"
                    + storeCredentials.getStoreAccount()
                    + "/sure/metadata /sure/replication/metadata'";
            Process p = Runtime.getRuntime().exec(prepareRsyncCommand);
            p.waitFor();
        } catch (Exception e) {
            System.out.print("Exception in downloading metadata from GoogleBucket");
            retCgaOperationStatus
                    .setScgaError(CGAError.SCGA_EXCEPTION_OCCURRED);
            ExceptionHandler.logException(logger, e);
            retCgaOperationStatus.setErrorMessage(e.getMessage());
        }
        return retCgaOperationStatus;
    }

我已经在linux机器上安装了Gcloud SDK,我正在尝试从 Jar文件运行gsutil命令,我的jar从一些外部程序通过ssh 执行。但它只是不起作用。

如果我手动运行相同的命令,它可以正常工作。可能是因为.bashrc是在我运行命令时加载的。

我如何从java做同样的事情。

1 个答案:

答案 0 :(得分:0)

在调用Runtime时,您应该使用String []而不是简单的String作为参数。

Runtime.getRuntime().exec(new String[]{"gsutil", "-m", "rsync", "-d", "-r", "gs://"+ storeCredentials.getStoreAccount(), "/sure/metadata /sure/replication/metadata'"});