gpt4 book ai didi

java - 从 Java 调用带有重定向的 bash 脚本

转载 作者:行者123 更新时间:2023-11-30 05:08:16 29 4
gpt4 key购买 nike

我有一个 bash shell 脚本,它执行一堆命令并使用 > 将命令输出重定向到日志文件。 。如果我使用 Runtime.getRuntime().exec("sh shellscript.sh"); 从 Java 调用 shell 脚本,shell 脚本被执行,但日志文件没有被写入!为什么?我该如何让它发挥作用?

编辑:好吧,我想做的有点不同。你的代码工作正常。但现在Java程序内部的重定向不起作用。下面的示例程序中,日志文件没有写入!

$ cat script.sh 
#!/bin/sh

echo "Hello there"
echo "Hello there 2"


$ cat RunScript.java
public class RunScript {
public static void main(String[] argv) throws Exception {
int i = Runtime.getRuntime().exec("sh /home/gpx/script.sh >> log").waitFor();
System.out.println("Exit code : " + i);
}
}

最佳答案

您正在写入的重定向 - 它们写入的是绝对文件路径还是相对文件路径?

如果它是相对的,那么它们(可能)将相对于工作目录 - 所以检查一下。

我所做的一个示例测试表明绝对路径可行

$ cat script.sh 
#!/bin/sh

echo "Hello there"
echo "Hello there 2" >> /Users/madhurt/test/log

exit 2

$ cat RunScript.java
public class RunScript {
public static void main(String[] argv) throws Exception {
int i = Runtime.getRuntime().exec("sh /Users/madhurt/test/script.sh").waitFor();
System.out.println("Exit code : " + i);
}
}
$ pwd
/Users/madhurt/test
$ ls -lrt
total 24
-rwxr-xr-x 1 madhurt staff 87 Dec 6 18:28 script.sh
-rw-r--r-- 1 madhurt staff 214 Dec 6 18:32 RunScript.java
-rw-r--r-- 1 madhurt staff 907 Dec 6 18:32 RunScript.class
$ java RunScript
Exit code : 2
$ ls -lrt
total 32
-rwxr-xr-x 1 madhurt staff 87 Dec 6 18:28 script.sh
-rw-r--r-- 1 madhurt staff 214 Dec 6 18:32 RunScript.java
-rw-r--r-- 1 madhurt staff 907 Dec 6 18:32 RunScript.class
-rw-r--r-- 1 madhurt staff 14 Dec 6 18:33 log
$ cat log
Hello there 2
$

关于java - 从 Java 调用带有重定向的 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4343829/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com