双击ubuntu桌面打开文件时如何更改工作目录?

Seu*_*ong 11 desktop-environments .desktop

想通过双击打开一个文件(.pdb 文件:蛋白质结构格式,没关系)。

“打开方式”被手动引导以使用 Ubuntu Tweak 执行“pymol”(一个打开 .pdb 格式的程序)。

但是,我发现工作目录$HOME。

由于目录中的其他文件我打开文件至关重要,我想访问它们。

我猜“pymol”是在 $HOME 上执行的,而“pdb 文件”(双击文件)的绝对路径作为参数传递。

我想这是有点普遍的问题并提出一个问题:

我怎样才能让系统更改“工作目录”“目录,我点击文件”和执行程序?

Tux*_*ife 19

尽管这是多年后的事,但这对我有用:

Exec=bash -c 'cd "%k" && ~/path/to/your/file'
Run Code Online (Sandbox Code Playgroud)

%k为您提供刚刚启动的启动器目录的路径。

  • %k 解析为完整路径,包括桌面文件,因此 `cd "%k"` 将不起作用。但是你可以使用`cd "$(dirname %k)"`。 (2认同)

小智 6

上述解决方案都不适用于我的 debian。也%d已弃用。请参阅桌面条目规范

所以我使用以下 bash 脚本来运行 pymol。首先,您需要创建以下 bash 脚本文件并将其保存在/usr/local/bin/run_pymol.sh. 我保存了文件,/usr/local因为它似乎xdg-open不明白什么是 HOME 目录等等。

#!/usr/bin/env bash
# change working directory
cd `dirname $1`
# run pymol
/usr/bin/env pymol $@
Run Code Online (Sandbox Code Playgroud)

其次,赋予该文件可执行权限。打开终端并键入以下命令以授予权限并进行确认。

% chmod +x /usr/local/bin/run_pymol.sh
% run_pymol.sh
Run Code Online (Sandbox Code Playgroud)

最后,pymol.desktop按以下方式修改您的文件,然后您的 pymol 将在第一个给定文件所在的目录中启动。

#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Name=PyMOL Molecular Graphics System
GenericName=Molecular Modeller
Comment=Model molecular structures and produce high-quality images of them
Type=Application
Exec=/usr/local/bin/run_pymol.sh %U
TryExec=pymol
Icon=pymol
MimeType=chemical/x-pdb
Categories=Education;Science;Chemistry;
Run Code Online (Sandbox Code Playgroud)

希望对大家有帮助:-)

  • 我能够输入`Path=/my/path`,效果很好。`Path - 如果条目是 Application 类型,则是运行程序的工作目录。` (7认同)

Nar*_*cal 5

我不明白为什么那里的解决方案如此受欢迎,它做了完全不同的事情。它将工作目录更改为 .desktop 文件所在的目录,而问题是将工作目录更改为打开文件的目录。

我的解决方案:

Exec=/bin/bash -c 'cd $(dirname $0) && micro $0'
Run Code Online (Sandbox Code Playgroud)

请记住,为 .desktop 文件设置环境变量是不同的,如下所示

Exec=env CPATH=../include /bin/bash -c 'cd $(dirname $0) && micro $0'
Run Code Online (Sandbox Code Playgroud)


Mos*_*rdy 0

您可以找到打开特定文件类型时调用的/usr/share/applications正确名称。file.desktop然后编辑它并在行中exec添加cd PATH &&到行的开头。


小智 0

好的 -

Exec=cd PATH &&  <application-name> %F
Run Code Online (Sandbox Code Playgroud)

对我来说不起作用,因为 PATH 未定义为指向 %F 的路径。任何应用程序桌面文件中唯一可用的变量是:

  • %fa 单个文件名。
  • %F 多个文件名。
  • %ua 单个 URL。
  • %U 多个 URL。
  • %da 单个目录。与 %f 结合使用来定位文件。
  • %D 多个目录。与 %F 结合使用来定位文件。
  • %na 没有路径的单个文件名。
  • %N 多个文件名,没有路径。
  • %ka 桌面文件位置的 URI 或本地文件名。
  • %v 设备条目的名称。

就是这样:%d 是您要查找的单个目录,因为更改为多个目录是没有意义的。因此,转到 /usr/share/applications 并编辑文件 application-name.desktop (在您的情况下为 pymol.desktop);您必须具有超级用户权限才能执行此操作。然后找到以“Exec=”开头的行。大概是这样写的

Exec=<application-name> %F
Run Code Online (Sandbox Code Playgroud)

(在你的情况下 Exec=pymol %F)。将此行更改为

Exec=cd %d && <application-name> %F
Run Code Online (Sandbox Code Playgroud)

保存该桌面文件,下次单击 .pdb 文件时,您的工作目录应该是该 .pdb 文件所在的目录,以便 pymol 可以看到其中的所有文件。

当然,您也可以在首先导航到文件所在的目录后从命令行启动 pymol,但我猜您想要一个 GUI 解决方案,所以您必须进行一些编辑:-)