首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java执行debian终端命令

Java执行debian终端命令
EN

Stack Overflow用户
提问于 2014-11-29 00:39:06
回答 1查看 245关注 0票数 0

关于通过Java向终端发送命令,我遇到了一个非常令人困惑的问题。我有这样的密码:

代码语言:javascript
复制
        Process p = Runtime.getRuntime().exec(new String[]{"useradd", server, "-p", pass, "-d",     "/home/dakadocp/servers/" + server, "-s", "/bin/false"});
        Runtime.getRuntime().exec(new String[]{"echo", server + ":" + pass, "|", "chpasswd"});

第一个命令是"useradd user -p password -d /home/ftp/test/ -s /bin/false“,第二个命令应该是回显式username:new_password chpasswd,第一个命令工作正常,并创建我通过"server”变量定义的用户,但是当我试图执行第二个命令来更改用户时,传递该命令的可能永远不会发生,输出为null,密码也不会更改,但是当我将该命令直接输入到终端时,它的工作非常完美,所以这只是一个Java问题。

我认为问题是在字符“x”中,在我尝试使用一些命令之前,它的行为和这个命令是一样的。我做错什么了?

谢谢。韦利特。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-29 00:50:21

|是一个shell特性,需要一个shell才能运行。最简单的解决方法是运行一个shell:

代码语言:javascript
复制
Runtime.getRuntime().exec(new String[] { "sh", "-c", "echo something | chpasswd" });

但是,java不仅仅能够编写需要shell或echo的进程。更好的方法是单独运行chpasswd并将字符串写入它:

代码语言:javascript
复制
Process p = Runtime.getRuntime().exec(new String[] { "chpasswd" });
PrintWriter writer = new PrintWriter(p.getOutputStream());
writer.println("foo:bar");
writer.close();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27197652

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档