我面临一个奇怪的问题,我有一个Java程序,它在netbeans中调用shell脚本。 shell脚本应该在运行脚本的同一目录中创建一个文件。但在这种情况下,输出文件将在netbeans(工作流)文件夹中创建。
任何人都可以让我知道我哪里错了。我不能改变剧本,因为它是动态的。
注意:如果我在命令提示符下运行该类文件是在脚本目录本身中创建的,问题是我在netbeans中运行
感谢任何帮助
答案 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脚本。