Java执行Linux命令

Arp*_*sss 1 java linux

我想写一个执行一些Linux命令的java代码:

String cmd = "cd /home/arps/FBI" ;

Process p=Runtime.getRuntime().exec(cmd);


String [] arr = new String [9] ;
 arr[0] = "cd /home/arps/FBI" ;
 for(int n = 1 ; n < 9 ; n++){
 String command = "mv" + "  " +  "/home/arps/FBI/hr" + n + ".txt" + "    " + "/home/arps/FBI/hrs" + n +".txt" ;
 arr[n] = command ;
}


 Process pp=Runtime.getRuntime().exec(arr);
Run Code Online (Sandbox Code Playgroud)

在上面的代码中:我尝试将名为hr1,hr2 ....的8个文件重命名为hrs1,hrs2 ...等.在cd命令中,我尝试输入所需的目录.但是,我也使用了绝对路径.但是代码给出了错误:

java.io.IOException: Cannot run program "cd": java.io.IOException: error=2, No such file or directory

java.io.IOException: Cannot run program "mv  /home/arps/FBI/hr1.txt    /home/arps/FBI/hrs1.txt": java.io.IOException: error=2, No such file or directory
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我为什么会发生这种情况虽然我手动执行这些命令"mv /home/arps/FBI/hr1.txt /home/arps/FBI/hrs1.txt"并正确执行?

Dou*_*der 9

cd是当前shell的内置命令 - 你不能执行它 - 它是一个内置的shell,因为cwd是一个进程级设置,所以一个新进程有它自己的值.有没有办法从java程序中改变CWD.

阵列参数版本exec是执行一个命令,那就是你有你自己分裂的论点,而不是执行多个命令.

因此,您需要提供完整路径,或者在Java中自己实现副本.