0

我有一个 shell 脚本,例如 testDB.sh,它以开关/标志的形式占用凭据(参数)。例如,要执行此脚本,我执行以下操作

./testDB.sh -u 用户名 -p 密码。

为了从 java 调用它,我遵循传统的方法。

Runtime.getRuntime().exec(new String[] {"bash","/<path to test script>/testDB.sh","<username>","<password>"});

以上似乎没有帮助的原因:(

我想知道如何通过以标志/开关的形式从 java 传递参数来调用这个脚本。我如何通过这个 -u 和 -v 开关?任何帮助,将不胜感激

4

3 回答 3

2

您还需要传递标志:

new ProcessBuilder("<script path>/testDB.sh",
  "-u", username,
  "-p", password
);

我强烈建议不要使用任何其他解决方案,因为它们很脆弱,并且当您在脚本的任何参数中有空格时会突然失败。

于 2013-11-06T15:01:13.753 回答
1

如果密码和用户名都存储在变量中,我建议您尝试:

Runtime.getRuntime().exec("<script path>/testDB.sh -u " + username + " -p " + password);
于 2013-11-06T13:11:28.770 回答
1

这不是你目前所拥有的太多的延伸。你目前有...

Runtime.getRuntime().exec(new String[] {"bash","/<path to test script>/testDB.sh","<username>","<password>"});

将其更新为

String command = String.format( "/<path to test script>/testDB.sh -u %s -p %s", username, password );
String[] cmdAndArgs = { "/bin/bash", "-c", command };

Runtime.getRuntime().exec( cmdAndArgs );
于 2013-11-06T13:29:27.767 回答