【问题标题】:Passing an object property to bash script using java使用java将对象属性传递给bash脚本
【发布时间】:2023-10-03 00:33:01
【问题描述】:

目前我正在尝试使用 Swing 的文件选择器创建一个桌面应用程序,该应用程序将使用 cygwin 将特定类型的文件转换为另一种文件。相关代码部分是:

String[] cmd = new String[]{"C:\\cygwin64\\bin\\mintty.exe", "/cygdrive/c/Users/orhun.vatansever/workspace/extchangegui/src/extchangegui/dene.sh"};
                Process pr = Runtime.getRuntime().exec(cmd);

这工作正常,但因为我的 bashscript 的内容就像

cd "${0%/*}"
java -jar xyz.jar aegis.xyz

这意味着我的代码适用于一个特定的 xyz 文件,我要做的是选择该文件并在该特定 xyz 文件上运行命令。我可以使用 myfile.getName() 获取文件名,但是我不知道如何使用这些数据,也不知道将其放在流程构建器的什么位置。我看到了两种我认为的解决方案,一种是将进程构建器参数之一(不知道是哪一个)设置为 "java -jar xyz.jar "+file.getName()"" ,另一种是在单击时更改脚本的内容文件选择器的打开按钮(我认为这没有意义)。

【问题讨论】:

  • 您在终端中运行脚本是否有原因(它将在您的屏幕上显示为一个窗口)?您可以运行“C:\\cygwin64\\bin\\bash.exe”,它不会创建一个窗口。
  • 我想让用户浏览文件,可能有很多 xyz 文件,用户可能想选择一个特定的
  • 好的,那是有道理的

标签: java bash swing jfilechooser processbuilder


【解决方案1】:

您可以将名称字符串添加到命令数组中,并在脚本中将其作为positional parameter 引用。说cmd[2] = "xyz"

 java -jar ${2}.jar aegis.${2}

这不是我想做的……我想……通过file.getName() 属性获得它的名字,并以某种方式将其传递给脚本,或者像java -jar xyz.jar + chosenFile.getName() 一样运行它

然后在命令字符串中传递文件名,cmd[2] = file.getName()

 java -jar xyz.jar ${2}

您还应该考虑使用ProcessBuilder 创建您的Process

【讨论】:

  • 这不是我想做的,我想做的是能够通过 file.getName() 属性传递选择的文件并获取其名称,并以某种方式将其传递给脚本,或者像 "java -jar xyz.jar "+chosenFile.getName()"" 一样运行它,
  • 但是 file 不是 java 对象和 getName() 不是 java 属性,当我在脚本中运行它们时它们会保留吗?
  • 我试过你说的,它没有返回任何错误但是它也没有生成它应该的文件夹
  • echo ${2} 添加到您的脚本中,看看会发生什么。