Shell脚本输出位于不同的目录中

时间:2014-05-24 07:06:45

标签: java bash shell netbeans

我面临一个奇怪的问题,我有一个Java程序,它在netbeans中调用shell脚本。 shell脚本应该在运行脚本的同一目录中创建一个文件。但在这种情况下,输出文件将在netbeans(工作流)文件夹中创建。

任何人都可以让我知道我哪里错了。我不能改变剧本,因为它是动态的。

注意:如果我在命令提示符下运行该类文件是在脚本目录本身中创建的,问题是我在netbeans中运行

感谢任何帮助

2 个答案:

答案 0 :(得分:1)

使用ProcessBuilder并调用directory(File)来设置相应的工作目录。

答案 1 :(得分:0)

考虑以下脚本:

#!/bin/sh
echo "hi" > hello.txt

运行此脚本时,它将创建" hello.txt"文件在当前目录

那么目前的目录是什么?那么这取决于你如何运行脚本。

  • 如果您只是从shell提示符运行脚本,那么当前目录将是shell的当前目录;即你在哪里唱歌。

  • 如果您运行Java程序并使用Runtime.exec()来运行该脚本,那么该脚本的当前目录将是Java程序的当前目录。

  • 从shell命令提示符(例如java -cp ... SomeClass)启动Java程序时,其当前目录将是shell当前目录。

  • 从IDE启动Java程序时,IDE程序的当前目录由IDE Java启动程序确定。 IDE(例如NetBeans,Eclipse)通常将项目目录作为已启动Java程序的当前目录。


这就是发生了什么。你应该怎么做呢?

  • 正如Tim Bender建议的那样,您可以使用ProcessBuilder,并将子进程的当前目录设置为您想要的目录。但这意味着您的Java程序需要知道正确的目录是什么。

  • 您可以更改脚本以使用输出文件的绝对路径名。但这意味着正确的目录必须是"有线"进入剧本。

  • 最佳解决方案(IMO)是单独保留Java程序和脚本,并更改​​IDE的Java启动程序配置,使启动程序的当前目录更合适(用于测试)

  • 或者,将输出目录作为Java程序的命令行参数(或配置文件条目)...并将参数值传递给shell脚本。