linux Java使用“|”执行debian终端命令
关于通过Java向终端发送命令,我遇到了一个非常令人困惑的问题。 我有这个密码:
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”,第二个命令应该是echo username:new|u password | chpasswd,第一个命令工作正常,并创建由“server”变量定义的用户,但是当我尝试执行第二个命令来更改用户时,传递这个命令可能永远不会发生,输出为null,密码也不会更改,但是当我直接向终端键入这个命令时,它工作得非常好,所以这只是Java的问题
我认为问题出在字符“|”上,在我尝试使用“|”执行某些命令之前,其行为与此命令相同。我做错了什么
谢谢。 韦利特
# 1 楼答案
|
是一个shell功能,需要一个shell才能运行。简单的解决方案是运行shell:然而,java完全能够在需要shell或echo的情况下写入进程。更好的方法是只运行
chpasswd
并将字符串写入其中: