为了使用一些命令行参数从 Java 启动它,我尝试以编程方式本地化作为 AppImage 运行的某个应用程序。在我的例子中,它是MuseScore 应用程序。
我使用命令安装了它./MuseScore*.AppImage install
。
我首先尝试从终端使用不同的选项来本地化该应用程序dpkg-query -L musescore
和which musescore
。我沒有回應。
在 Windows 中,我既可以搜索注册表,也可以解析命令行命令的结果assoc ".myext"
。
然后,在 Java 中,使用
String program=null;
Process pr = Runtime.getRuntime().exec("cmd /c assoc \".myext\"");
try (BufferedReader reader = new BufferedReader(new InputStreamReader(pr.getInputStream()))) {
program=reader.readLine();
}
我怎样才能在 Ubuntu 中做到这一点?
答案1
./MuseScore*.AppImage install
将 appimage 移至~/.local/bin
。
未创建名为 的命令,musescore
因此您使用的 which 命令在这种情况下毫无用处。dpkg
也不会给您任何线索,因为您没有使用dpkg
它来安装它。安装还创建了一些指向名为mscore-portable
和 的应用程序映像的符号链接musescore-portable
。
您可以使用find
-command 来定位 appimage。我不需要这样做,我只是读取了 install 命令的输出。
要从命令行运行 appimge,您需要指定 appimage 的完整路径,如果~/.local/bin
不在您的 PATH 中,则指定其中一个符号链接。
答案2
如果您需要知道 AppImage 二进制文件(或任何文件)的位置,请运行以下命令。
find / -name "*.AppImage" -exec ls -l {} \;
该命令find
将搜索 root /
,然后ls -l
显示文件的路径。如果文件名已更改,请进行相应调整。
正如其他人指出的那样,使用dpkg-query -L musescore
不会产生任何结果,因为二进制文件不是使用包管理器安装的;因此,dpkg
不“知道”它的存在。
并且使用which musescore
也不会产生结果,因为 AppImage 不在 PATH 中定义的目录中,也不在可执行二进制文件的文件名中,即二进制文件是MuseScore.AppImage
而不是musescore
。
答案3
可以通过 3 个步骤实现此目的:
- (可选)检索所搜索应用程序管理的文件的 mime 类型
命令:xdg-mime query filetype path\to\a\file
结果:application/x-y-z
- 搜索处理此 mime 类型的应用程序:
命令:xdg-mime query default application/x-y-z
结果:someapplication.desktop
- 搜索该桌面文件并提取执行路径:搜索
XDG_DATA_DIRS
以及中列出的文件夹中的文件/home/myuser/.local/share/applications/
。如果找到,则将其解析为常规属性文件并搜索Exec
属性
看https://gist.github.com/lgvr123/cdeb8f432ddfdc0ae56ce23e71f1b177
- 或者,如果 (3) 失败:在本地搜索应用程序:
命令:(which someapplication
请注意,“.desktop”已从步骤(2)的结果中删除)
结果:/home/myuser/.local/bin/someapplication
如果应用程序不在本地,则为空字符串。