gpt4 book ai didi

java - 无法使用 getruntime.exec() 成功执行 Shellscript

转载 作者:行者123 更新时间:2023-12-02 05:36:36 25 4
gpt4 key购买 nike

我已经编写了一段代码来从java执行脚本:

 String wrapper_script=homedir+"/blast_distribute.sh "+" --seqs="+seqs+" --i="+formobj.getUpFile().getFileName()+"  "+formobj.getSelected_program();

script_exec=Runtime.getRuntime().exec(wrapper_script);

这对我来说非常适合,因为命令已成功执行。现在我需要以其他用户身份运行此命令,因此我需要以如下格式执行命令:

su username -c 'command'

所以我已将上面的 script_exec 字符串编辑为:

String wrapper_script1="su - "+username+" -c "+"'"+wrapper_script+"'";

我已经打印了wrapper_script1,它显示:

su - abhijeet -c '/home/abhijeet//blast_distribute.sh --seqs=1562 --i=mPS_0.contigs.fasta'

如果我直接在 Linux 上运行相同的命令,它的工作原理完全符合我的需要。但是当我运行时:

script_exec=Runtime.getRuntime().exec(wrapper_script1);它无法正常工作,在我的错误流中我收到错误为

su: unrecognized option '--seqs=1562' Try `su --help' for more information.

我已经尝试了很多,但无法解决该问题。此问题的原因是什么?

最佳答案

您应该为此使用多个参数运行:

Runtime.getRuntime().exec(new String[] {"su", "-", username, "-c",
homedir + "/blast_distribute.sh " + " --seqs=" + seqs + " --i=" + formobj.getUpFile().getFileName() + " " + formobj.getSelected_program()
});

您收到错误,因为 ' 在这里不被视为封闭字符,而是被视为 su 命令的参数。

让我们看看细节。当您在控制台中输入一些命令(例如 su - jsmith -c 'aba --cabga')时,您所做的是:“使用这样的参数运行命令 su: -jsmith-caba --caba(一个参数代表多个单词)”。

您应该在 Java 代码中执行同样的操作。 Java API 中有一个特殊命令,用于使用具体参数运行具体命令,而不是像 shell 那样解析行: Runtime.exec(String[]) :第一个参数是命令,接下来是参数。这就是我们在此代码块中所做的。

关于java - 无法使用 getruntime.exec() 成功执行 Shellscript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24906384/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com