gpt4 book ai didi

java - Process.= Runtime.getRuntime().exec() 不适合我

转载 作者:太空宇宙 更新时间:2023-11-04 09:46:42 24 4
gpt4 key购买 nike

当我从 java 执行 linux 命令时它不起作用任何人都可以帮助我解决这个问题。

process3 = Runtime.getRuntime().exec(new String[] {"ls",
"-1s",
"--block-size=1",
TStamp+"/received/i*.*",
"$dir|",
"awk",
"'{print $2\"\\t\"$1}'",
">>",
"./"+TStamp+"/qa/manifest_QAG.txt"});
InputStream in1 = process3.getInputStream();
BufferedReader br1=new BufferedReader(new InputStreamReader(in1));
String line1 =null;
while((line1=br1.readLine())!=null)
{
System.out.println(line1);
}

Edit1:我正在尝试列出文件并在 manifest_QAG.txt 中生成 list

Linux 下的实际命令:

ls -1s --block-size=1 20130328094916142/received/is*.* $dir| awk '{print $2"\t"$1}'

Edit2:我没有得到任何异常,甚至没有创建文件 manifest_QAG.txt

编辑 3:

最佳答案

您没有得到异常,因为 ls 命令不是 Java,它不是与异常通信,而是与 STDERR 上的错误消息和退出代码通信。

其实你必须明白当你输入一个命令时shell做了什么以及这个命令做了什么。因此,像这样的 shell 命令行

ls -1s --block-size=1 20130328094916142/received/is*.* $dir| awk '{print $2"\t"$1}'

由 shell 以这种方式处理:

  • shell:将 20130328094916142/received/is*.* 扩展为文件名列表
  • shell:将 $dir 部分展开为文件名列表
  • shell: 使用参数执行 ls 命令
    • ls
    • -1s
    • --block-size=1
    • 每个扩展文件名作为一个单独的参数
  • shell: 执行带有参数的awk命令
    • {print ...}
  • shell:将ls的输出连接到awk的输入
  • ls:计算参数
  • awk:读取每一行,用给定的脚本处理并输出结果。

你看:环境变量和通配符的扩展是shell完成的,不是ls

回到Java:execute NOT 像 shell 一样处理参数。那取决于你。因此,您的调用大致是这样的 shell 等价物:

ls '-1s' '--block-size=1' '20130328094916142/received/is*.*' '$dir' '|' 'awk' '{print $2"\t"$1}'

所有内容都被引用,甚至是管道,因此 shell 不会扩展任何内容。

问题到此为止。解决方案是什么?

  • 您可以模拟 shell 并用 Java 进行扩展。玩得开心。 (即这不是真正的解决方案)。
  • 您可以从 Java 而不是 ls 调用 shell。

后面是这样的:

shell 通常有一个 -c 选项,您可以在其中给它一个 命令字符串,然后以与实际键入的命令行相同的方式对其进行评估。

所以你这样调用命令

String[] args = {
"/bin/sh",
"-c",
"ls -1s --block-size=1 20130328094916142/received/is*.* $dir| awk '{print $2\"\t\"$1}'"
};
Process process3 = Runtime.getRuntime().exec(args);

尽管正确引用 awk 命令可能需要做更多的工作。

关于java - Process.= Runtime.getRuntime().exec() 不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15685057/

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