想要通过双击打开一个文件(.pdb 文件:蛋白质结构格式,没关系)。
“打开方式”手动指示使用 Ubuntu Tweak 执行“pymol”(打开.pdb 格式的程序)。
然而,我发现工作目录是$HOME。
与其他文件一样我打开文件的目录至关重要的是我想要访问它们。
我猜测“pymol”是在 $HOME 上执行的,而“pdb 文件”(双击的文件)的绝对路径作为参数传递。
我想这是一个普遍的问题,并提出一个问题:
我怎样才能让系统改变“工作目录”到“我单击文件的目录”并执行一个程序?
答案1
尽管已经过去了很多年,但以下方法对我来说仍然有效:
Exec=bash -c 'cd "%k" && ~/path/to/your/file'
%千为您提供刚刚启动的启动器目录的路径。
答案2
以上解决方案均不适用于我的 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 $@
第二步,赋予该文件可执行权限。打开终端并输入以下命令来授予权限并确认。
% chmod +x /usr/local/bin/run_pymol.sh
% run_pymol.sh
最后,按如下所示修改您的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;
希望它能帮助你们:-)
答案3
我不明白为什么上面的解决方案得到如此多的赞成,它做了完全不同的事情。它将工作目录更改为 .desktop 文件所在的目录,而问题是将工作目录更改为打开文件的目录。
我的解决方案:
Exec=/bin/bash -c 'cd $(dirname $0) && micro $0'
请记住,为 .desktop 文件设置环境变量是不同的,如下所示
Exec=env CPATH=../include /bin/bash -c 'cd $(dirname $0) && micro $0'
答案4
与@tuxForLife 的方法类似但不完全相同:
将当前目录作为第一个参数传递:
#!/usr/bin/env xdg-open
[Desktop Entry]
Version=1.0
Type=Application
Terminal=true
Exec=/usr/bin/bash /home/frank/bin/checkExtensionless.sh "%k"
Name=checkExtensionless
Icon=system-upgrade
checkExtensionless.sh
我遇到过这种情况:如果文件名中有空格,则路径会用单引号引起来'/somewhere/my stuff/'
,所以我必须删除它们,然后使用 cd 进入它。(builtin
只是过于热衷于绕过 .bashrc 中任何花哨的 cd 包装器)
#!/usr/bin/env bash
prunedQuotes="$(echo $1 | sed -e "s/'//g")"
workdir="$(dirname "$prunedQuotes")"
builtin cd "$workdir"
<your actual script>