How to run commands you can run on terminal in Java
The existing answers give you the information on how to solve your problem in code, but they don't give a reason why your code is not working.
When you execute a program on a shell, there's significant processing done by the shell, before the program is ever executed. Your command line
String[] command = {"ag","startTimes conf.js >> pro.txt"};
ProcessBuilder builder = new ProcessBuilder(command);
assumes that the command ag
is run with the single argument startTimes conf.js >> pro.txt
- most likely not what you want to do. Let's go one step further: What if you wrote
String[] command = {"ag","startTimes", "conf.js", ">>", "pro.txt"};
ProcessBuilder builder = new ProcessBuilder(command);
?
This would assume that the ag
command knows about the >>
parameter to redirect its output - and here is where the shell comes into play: The >>
operator is an instruction to the shell, telling it what to do with the output from stdout of the process. The process ag
, when started by the shell, never has an idea of this redirection and has no clue about >>
and the target file name at all.
With this information, just use the code samples from any of the other answers. I won't copy them into mine for proper attribution.
Executing terminal commands from java
I don't have a Linux system here to play with, but I'm pretty certain that the second command above is trying to compile Java files named "Test.java", "&&", "java" and "Test"; in other words the Runtime.exec() method treats arguments literally instead of applying shell interpretation.
You could probably get it to work with something along the lines of:
Process p = Runtime.getRuntime().exec(
new String[] { "sh", "-c", "javac Test.java && java Test" });
How do i run a Linux terminal cmd from a java program
You can use the below command format to run your Linux command.
Runtime r = Runtime.getRuntime();
Process p = r.exec(yourcmd);
Please go through Running unix command from Java and Unable to run Unix command in Java-Stackoverflow
Hope you get your answers here.
Run cmd commands through Java
One way to run a process from a different directory to the working directory of your Java program is to change directory and then run the process in the same command line. You can do this by getting cmd.exe
to run a command line such as cd some_directory && some_program
.
The following example changes to a different directory and runs dir
from there. Admittedly, I could just dir
that directory without needing to cd
to it, but this is only an example:
import java.io.*;
public class CmdTest {
public static void main(String[] args) throws Exception {
ProcessBuilder builder = new ProcessBuilder(
"cmd.exe", "/c", "cd \"C:\\Program Files\\Microsoft SQL Server\" && dir");
builder.redirectErrorStream(true);
Process p = builder.start();
BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line;
while (true) {
line = r.readLine();
if (line == null) { break; }
System.out.println(line);
}
}
}
Note also that I'm using a ProcessBuilder
to run the command. Amongst other things, this allows me to redirect the process's standard error into its standard output, by calling redirectErrorStream(true)
. Doing so gives me only one stream to read from.
This gives me the following output on my machine:
C:\Users\Luke\StackOverflow>java CmdTest
Volume in drive C is Windows7
Volume Serial Number is D8F0-C934
Directory of C:\Program Files\Microsoft SQL Server
29/07/2011 11:03 <DIR> .
29/07/2011 11:03 <DIR> ..
21/01/2011 20:37 <DIR> 100
21/01/2011 20:35 <DIR> 80
21/01/2011 20:35 <DIR> 90
21/01/2011 20:39 <DIR> MSSQL10_50.SQLEXPRESS
0 File(s) 0 bytes
6 Dir(s) 209,496,424,448 bytes free
firing a command in terminal from java program
If you want to actually start a terminal window (rather than just executing the java process) you will need to launch xterm (or something similar) and tell xterm to run java for example
String command= "/usr/bin/xterm -e /home/raj/Desktop/java -jar test.jar";
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec(command);
How to execute a code n times from the terminal?
You can repeat terminal commands as mentioned in the following link.
http://www.mactricksandtips.com/2012/02/loop-repeat-terminal-commands.html
But I suggest you add a for loop and get the number of repetitions as an argument. So you can run the command the number of times you need.
Related Topics
Java Equivalent to PHP'S Preg_Replace_Callback
How to Style the Progressbar Component in Javafx
How to Get the Download Url from Firebase Storage
Fast Bitmap Blur For Android Sdk
Populating a Listview Using an Arraylist
What Issues Should Be Considered When Overriding Equals and Hashcode in Java
Why Is 128==128 False But 127==127 Is True When Comparing Integer Wrappers in Java
Why Can't I Use Switch Statement on a String
When Would You Use the Builder Pattern
Signing Pdfs on a Server Document Using a Signature from the User
Find Div Element by Multiple Class Names
Can't Start Eclipse - Java Was Started But Returned Exit Code=13
Override Back Button to Act Like Home Button
Execution Failed For Task :App:Compiledebugjavawithjavac in Android Studio
Running a Jar File Without Directly Calling 'Java'