UNIX "export" Command from Java
Hi,
Am facing a problem while exeuting UNIX command from java. Am attaching the code which I am trying to execute.
import java.io.*;
public class RunCommandExample {
public static void main(String args[]) {
String s = null;
try
Runtime.getRuntime().exec("password=midware1");
//p = Runtime.getRuntime().exec("export password");
System.exit(0);
catch (IOException e)
System.out.println("[IOException]. Printing Stack Trace");
e.printStackTrace();
System.exit(-1);
}This gives me the following error.
[IOException]. Printing Stack Trace
java.io.IOException: password=midware1: not found
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:52)
at java.lang.Runtime.execInternal(Native Method)
at java.lang.Runtime.exec(Runtime.java:566)
at java.lang.Runtime.exec(Runtime.java:428)
at java.lang.Runtime.exec(Runtime.java:364)
at java.lang.Runtime.exec(Runtime.java:326)
at RunCommandExample.main(RunCommandExample.java:24)
Please let me know the solution for this problem.
Waiting for your valuable replay..
Thanks in advance,
Ashly.
Assigning and exporting variables are not commands that you can execute from Java. You can only execute programs--binary executables. Assigning and exporting shell or environment variables is part of the shell.
Why are you trying to do this? Even if you could, it wouldn't affect the running VM, and it wouldn't affect anything outside that exec() invocation.
If you need to set them for something else you're going to run, then you should set them in a shell script and run that script.
Similar Messages
-
Invoking a UNIX shell command from Java stored procedure
The program below is suppose do send an email using UNIX mailx program. It works correctly when I compile it in UNIX and invoke it from the command line by sending an email to the given address.
I need this program to run as a stored procedure, however. I deploy it as such and try to invoke it. It prints the results correctly to the standard output. It does not send any emails, however. One other difference in execution is that when invoked from the command line, the program takes about a minute to return. When invoked as a stored procedure in PL/SQL program or SQL*Plus anonymous block, it returns immediately.
Why would mailx invocation not work from a stored procedure? Are there other ways to invoke mailx from PL/SQL?
Thank you.
Michael
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
public class MailUtility
public static void main(String[] args)
System.out.println(mailx("Hey, there", "Hello", "oracle@solaris10ora", 1));
* Sends a message using UNIX mailx command.
* @param message message contents
* @param subject message subject
* @param addressee message addressee
* @param display if greater than 0, display the command
* @return OS process return code
public static int mailx(String message, String subject,
String addressee, int display)
System.out.println("In mailx()");
try
String command =
"echo \"" + message + "\" | mailx -r [email protected]" + " -s \"" + subject + "\" " + addressee;
if (display > 0)
System.out.println(command);
try
Process process = Runtime.getRuntime().exec("/bin/bash");
BufferedWriter outCommand =
new BufferedWriter(new OutputStreamWriter(process.getOutputStream()));
outCommand.write(command, 0, command.length());
outCommand.newLine();
outCommand.write("exit", 0, 4);
outCommand.newLine();
outCommand.flush();
process.waitFor();
outCommand.close();
return process.exitValue();
catch (IOException e)
e.printStackTrace();
return -1;
catch (Exception e)
e.printStackTrace();
return -1;try adding the full explicit path to "mailx" in the command string that gets sent to Runtime. i would guess that the shell that gets spawned might not have a proper environment and thus mailx might not be found.
== sfisque -
Efficiently Running UNIX des command from Java
Hi,
I am trying to execute the following code in a loop to have an Brute Force attack for recovering the key.
Runtime r = Runtime.getRuntime();
p = r.exec("des -D -k "+keys.get(randomIndex)+ " " +cipherTextFileName);
But as the des command has to read the file every time the programm is not a efficient one.Can I do something like reading the ciphertext from the file only once and then pass it to the des command from the java.So that it won't do I/O operations resulting good performamnce.If I can do this how to do it.Please suggest with examples.
Thanks
TapasIf you use Java you're not doing that. What does being an Academic project have to do with what tools you're allowed to use? Who is dictating that you're "only" allowed to use the des command line tool? (If it comes to that, which des command line tool are you using anyway? It's not a unix standard thing).
The one thing you can do is to see if there is an option to read the file(s) from standard input and send them to the process from the Java runtime that way - that way the input doesn't have to be read multiple times. However this is unlikely to make any significant difference. Most of the performance cost is likely to be the context switch required to kick off the new process with very little cost incurred from re-reading a file from the disk cache.
You've got your answer anyway. You're not going to be able to make this much more efficient. I recommend not doing that. If you really really have to, well, tough. -
Issues with running UNIX shell command from Java
Here is my java class file:
create or replace and compile java source named host as
import java.lang.* ;
public class Host
public static void cmdTest()
String cmd = "ps -ef | grep orcl" ;
int rc = 0 ;
int = runCmd(cmd) ;
public static int runCmd(String str )
Runtime rt = Runtime.getRuntime() ;
int rc = -1 ;
try
Process p = rt.exec(str) ;
int bufSize = 4096 ;
BufferedInputStream bis =
new BufferedInputStream(p.getInputStream(), bufSize) ;
int len ;
byte buffer[] = new byte[bufSize] ;
// Log what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
rc = p.waitFor() ;
catch (Exception e)
e.printStackTrace();
rc = -1 ;
finally
return rc ;
show errorsI can call runCmd directly from SQLPlus using an Oracle stored procedure and it runs like expected. I can see the returned output using dbms_java.set_output(1000000).
But when I call cmdTest from SQLPlus using an Oracle stored procecdure it just hangs forever and I have to kill the session.
Is there something I am missing in the cmdTest method?Jimmy,
If you haven't already seen it, I think the following article may be of help:
http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html
Also a "finally" block should not contain a "return" statement:
http://weblogs.java.net/blog/staufferjames/archive/2007/06/_dont_return_in.html
Good Luck,
Avi. -
Call an interactive UNIX command from java
Hi,
I want to call a UNIX command from java. When issue the command 'htpasswd -c filename username' on UNIX terminal, it asks for the new password and the then confirmation password again (yeah, unfortunately the htpasswd installed on our system does not allow you proivde the password on the command line. So have to work interactively ). Now, I have written a simple java program RunCommand.java. I am hardcoding the password for the htpasswd command in the file (in the real situation, password will be generated dynamically). I want to issue 'java RunCommand' on the UNIX command line and get back the command prompt without being asked for the password twice. The code is below, but the Outputstream does not work as expected. It always asks for inputs. Any idea? Many thanks.
import java.io.*;
public class RunCommand {
public static void main(String args[]) throws Exception {
String s = null;
try {
String cmd = "htpasswd -c filename username ";
// run a Unix command
Process p = Runtime.getRuntime().exec(cmd);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new InputStreamReader(p.getErrorStream()));
OutputStream stdOut = p.getOutputStream();
String pswd = "mypassword";
while ((s = stdInput.readLine()) != null) {
s = stdInput.readLine();
stdOut.write(pswd.getBytes());
stdOut.flush();
System.out.println("Here is the standard error of the command (if any):\n");
while ((s = stdError.readLine()) != null) {
System.out.println(s);
stdOut.close();
stdInput.close();
stdError.close();
System.exit(0);
catch (IOException e) {
System.out.println("exceptions caught: ");
e.printStackTrace();
System.exit(-1);There are only about 9 billion responses a day on how to do this. Use the search feature.
-
Execute unix commands from Java
Hi,
I have a client application running on windows. This client should connect to a unix server and check for the existence of a file and display the result as "File found/File not found". In order to connect from windows to the unix server, I used the sockets and the connection is successfully established. The second part is to check for the presence of the file in unix server. I searched in google.com and the option I found to execute a unix command from java is the "Runtime.exec()". Runtime.exec is considered as the less effective (not a favorable) one.
Is there any other option available (other than the Runtime) to execute the unix command from java? Can you please let me know.
Thanks a lot
AishuSo, please let me know how I can execute the above unix commands without Runtime.exec()You have a client and a server.
You want something to run on the server, not the client.
That means that something must in fact being running on the server before the client does anything at all.
For example telnet. Or a J2EE server application.
So is something like that running?
If not then there absolutely no way to do what you want, even with Runtime.exec().
If yes then what you do depends on what is running. So Runtime.exec() would be pointless if a J2EE server was running. -
Execute shell command from Java
Hi all,
I need some idea for executing shell script from Java programe.
For example i have start.sh script in /tmp/start.sh folder of unix server.
I want to execute shell script from local java code.
Any idea on this.Hi,
Read the following articles/posts, maybe this could help you:
How to execute shell command from Java
Running system commands in Java applications | java exec example | alvinalexander.com
Want to invoke a linux shell command from Java - Stack Overflow -
How to call gnuplot command from java
Hi there,
In our course, we are required to develop an GUI for gnuplot. In case you don't know about gnuplot, it's a plotting program and has lots of command. We want to use java and swing, but now we don't know how to call gnuplot command from java, or how to execute a shell command(script) from java.
By the way, since we need read in files with several columns of data and allow user to select a column, we want to use JTable. Is that reasonable?
Thanks a lot for any suggestions!
JackHi, there:
Will using JTable add much overhead? I may have to use several JTables and switch among them. I can add scroll bar to or edit JTables, right?
BTW, do you have experience about gnuplot? Can I find the command tree of gnuplot somewhere? Or do you know a better place to post question about gnuplot? unix/linux group, maybe.
Thanks,
Jack
P.S. Would you guys answer my question after I use up my duke dollars? :- ) -
Invoking unix shell scripts from java?
Hi,
could someone explain to me how one wuld invoke unix shell scripts from java.
Also, could you invoke Visual Basic scripts from java.
Finally, could you do this from an EJB?
thanks for any help....
suduI just posted a snippet of this solution in the topic about widows commands chech it out it works just fine for unix shell scripts.
--Ian -
Running ls command from Java stroed procedure no output
Hi ,
I am trying to run ls command from java stored procedure in oracle
Process p = Runtime.getRuntime().exec("ls");
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));
BufferedReader stdError = new BufferedReader(new
InputStreamReader(p.getErrorStream()));
// read the output from the command
System.out.println("output of the command run:\n");
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
from java stored procedure in oracle.
i get output of println statments but it does not go into while loop to print from stdInput.
Result of running Java stored procedure is -
output of the command run:
Call completed.
when i run the program on client side it works fine.
Has anybody tried this from java stroed procedure.
Thanks,
JagJag,
Actually, the question of whether it works for me seems to depend on the version of the OS (or Oracle). On RedHat Linux (Oracle 8.1.6) it didn't work at all, but on Solaris (Oracle 9.0.2) it did. Here's the output from that run:
SQL> /
output of the command run:
init.ora
initDBPart9i.DBPSun01.ora
initdw.ora
lkDBPART9I
orapw
orapwDBPart9i
spfileDBPart9i.ora
Done
PL/SQL procedure successfully completed.
But, I did need to change a line of your code to this:
Process p = Runtime.getRuntime().exec("/usr/bin/ls");
your original was:
Process p = Runtime.getRuntime().exec("ls");
You might consider, if possible, use of some of the Java File classes instead of ls, as this might make things more predictable for you. There were some examples in oramag.com a few months ago, but they were pretty simple (you might not need them).
Hope this helps,
-Dan
http://www.compuware.com/products/devpartner/db/oracle_debug.htm
Debug PL/SQL and Java in the Oracle Database -
How to execute Linux command from Java app.
Hi all,
Could anyone show me how to execute Linux command from Java app. For example, I have the need to execute the "ls" command from my Java app (which is running on the Linux machine), how should I write the codes?
Thanks a lot,You can use "built-in" shell commands, you just need to invoke the shell and tell it to run the command. See the -c switch in the man page for your shell. But, "ls" isn't built-in anyays.
If you use exec, you will want to set the directory with the dir argument to exec, or add it to the command or cmdarray. See the API for the variants of java.lang.Runtime.exec(). (If you're invoking it repeatedly, you can most likely modify a cmdarray more efficiently than having exec() decompose your command).
You will also definitely want to save the returned Process and read the output from it (possibly stderr too and get an exit status). See API for java.lang.Process. Here's an example
java.io.BufferedReader br =
new java.io.BufferedReader(new java.io.InputStreamReader(
Runtime.getRuntime().exec ("/sbin/ifconfig ppp0").
getInputStream()));
while ((s = br.readLine()) != null) {... -
hi all
how do i run dos commands from java??????????Using Runtime#exec().
Also see http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Runtime.html -
Hi, I need to perform a DOS command from Java (using WFC if needed)...
I have no idea, so please help!
Thank you.OH OH OH WAIT! It is an Applet! i think there will be some security issues here! Sure enough you can't execute commands on the system from an applet unless you make some changes on the java.policy files on the client machine (that means, if your applet is in a web page, every machine which view your page).
-
Execute linux command from java
I wanna execute linux command from java, bu the output has error:
Return code = 1
top: failed tty get
The code as:
import java.io.*;
public class Execute {
public static void main(String[] args) {
try {
final Process process = Runtime.getRuntime().exec("top");
new Thread() {
public void run() {
try {
InputStream is = process.getInputStream();
byte[] buffer = new byte[1024];
for (int count = 0; (count = is.read(buffer)) >= 0;) {
System.out.write(buffer, 0, count);
} catch (Exception e) {
e.printStackTrace();
}.start();
new Thread() {
public void run() {
try {
InputStream is = process.getErrorStream();
byte[] buffer = new byte[1024];
for (int count = 0; (count = is.read(buffer)) >= 0;) {
System.err.write(buffer, 0, count);
} catch (Exception e) {
e.printStackTrace();
}.start();
int returnCode = process.waitFor();
System.out.println("Return code = " + returnCode);
} catch (Exception e) {
e.printStackTrace();
}Help please.Your code is probably good to run a program, that does not use terminal capabilities.
Program "top" is a little bit more complicated - you have to run it with a real terminal.
Try to run "xterm -e top". You can find an example how to run an external program
from java code in cnd/gdb module on http://cnd.netbeans.org
For example, take a look at openExternalProgramIOWindow() method on this page:
http://cnd.netbeans.org/source/browse/cnd/gdb/src/org/netbeans/modules/cnd/debugger/gdb/proxy/Attic/GdbProxyCL.java?rev=1.1.2.6.2.5&only_with_tag=release551_fixes&view=markup
It runs a command with external terminal.
Thanks,
Nik -
Running OpenVMS DCL command from Java
Hi,
I want to execute an Alpha OpenVMS 7.2-2 command from Java. I use JDK 1.1.8-1.
I have to place the DCL command in an OpenVMS .COM file because passing a DCL
image like DIR doesn't work using Runtime.exec().
When I ran the Java program, I get the following error:
java.io.IOException: Child creation error: exec format error
at java.lang.UNIXProcess.<init>(Compiled Code)
at java.lang.Runtime.exec(Compiled Code)
at java.lang.Runtime.exec(Compiled Code)
at oscmd.main(Compiled Code)
here is my Java program:
import java.io.*;
public class oscmd {
public static void main(String[] args) throws Exception {
Process child = Runtime.getRuntime().exec(
"dra1:[oracle8.db_adamp.backup]RUNCMD.COM");
child.waitFor();
child.exitValue();
child.destroy();
Thanks for your help.Hi,
Did you get your exec format error problem?
I'm having exactly the same problem and would greatly appreciate any help you could offer.
Thanks
Tim
Maybe you are looking for
-
Power mac G5 2004 won't power on
Hello all, my Power mac G5 June 2004, won't power on at all. I've changed the logic board, power supply, dual processors, front panel board, and front panel board cable. Still getting the same results. The only thing I could think of next is the powe
-
I installed iOS 6 to my ipad and I used Siri and now it's not working
Please tell me the trick of it
-
Problem with SunFileBinding configured with endpoints.xml
Hello, I'm trying to confiugure the SunFileBinding using the endpoint.xml file. The idea is to pikcup a file from the filesystem and pass it to my engine. I've checked the samples under ri-components/file-binding and I (think) my descriptors are iden
-
I wish to uninstal lMozilla in Control Panel and it does not go
How do I uninstall Mozilla. It will not uninstall when try to remove it in Control Panel
-
Maxim number of fields in a structure
Hi, I need to create a flat structure with 4000 fields by SE11. Is that possible? Is there any limit on how many fields can be created for a structure? Thanks, Karen