我有一个shell脚本,例如testDB.sh,它以switch / flags的形式接受凭证(参数)。例如,为了执行此脚本,我执行以下操作
./ testDB.sh -u username -p password。
为了从java调用它,我遵循传统的方法。
Runtime.getRuntime().exec(new String[] {"bash","/<path to test script>/testDB.sh","<username>","<password>"});
以上似乎没有帮助原因:(
我想知道如何通过从java中以flags / switches的形式传递参数来调用此脚本。我如何通过这个-u和-v开关?任何帮助将不胜感激
答案 0 :(得分:2)
您还需要传递标记:
new ProcessBuilder("<script path>/testDB.sh",
"-u", username,
"-p", password
);
我强烈反对任何其他解决方案,因为它们很脆弱,并且当你在任何脚本的参数中都有空格时会突然失败。
答案 1 :(得分:1)
如果密码和用户名都存储在变量中,我建议您尝试:
Runtime.getRuntime().exec("<script path>/testDB.sh -u " + username + " -p " + password);
答案 2 :(得分: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 );