Хотел открыть файл (файл .pdb: структура белка, неважно) двойным щелчком мыши.
«Открыть с помощью» вручную направляют на выполнение «pymol» (программы, открывающей формат .pdb) с помощью Ubuntu Tweak.
Однако я обнаружил, что рабочий каталог - это $ HOME.
Как и другие файлы в , каталог, который я открыл, файл имеет решающее значение, и я хочу получить к ним доступ.
Я полагаю, что «pymol» выполняется в $ HOME, а абсолютный путь к «pdb file» (файлу с двойным щелчком) передается в качестве аргумента.
Я полагаю, что это довольно общая проблема, и задаю вопрос:
Как разрешить системе изменить «рабочий каталог» на каталог «где Я щелкнул файл « и выполнить программу?
Вы можете перейти к /usr/share/applications
и найти правильный file.desktop
, который вызывается всякий раз, когда вы открываете файл определенного типа. Затем отредактируйте его и в строке exec
добавьте cd PATH &&
в начало строки.
Хотя это годы спустя, вот что сработало для меня:
Exec=bash -c 'cd "%k" && ~/path/to/your/file'
% k дает вам путь к каталогу только что запущенного модуля запуска.
Я не понимаю, почему решение там так upvoted, это делает абсолютную другую вещь. Это изменяет рабочий каталог на тех, где .desktop файл, в то время как вопрос собирался изменить рабочий каталог на тех, которые имеют открытый файл (файлы).
Мое решение:
Exec=/bin/bash -c 'cd $(dirname $0) && micro $0'
Примите во внимание, что установка огибающих переменных для .desktop файлов отличается, как так
Exec=env CPATH=../include /bin/bash -c 'cd $(dirname $0) && micro $0'
Ни одно из вышеприведенных решений не работало на моем 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;
Надеюсь, это поможет вам, ребята: -)
OK -
Exec=cd PATH && <application-name> %F
у меня не сработало, поскольку PATH не определен, чтобы указывать на путь% F. Единственные переменные, доступные в любом файле рабочего стола приложения:
Вот оно:% d - это единственный каталог, который вы ищете, так как нет смысла переходить на несколько каталогов. Перейдите в / usr / share / Applications и отредактируйте файл application-name.desktop (в вашем случае pymol.desktop); Вы должны иметь привилегии суперпользователя, чтобы сделать это. Затем найдите строку, которая начинается с «Exec =». Вероятно, он читается как
Exec=<application-name> %F
(в вашем случае Exec = pymol% F). Измените эту строку на
Exec=cd %d && <application-name> %F
Сохраните этот файл рабочего стола, и в следующий раз, когда вы нажмете на файл .pdb, ваш рабочий каталог должен быть тем, в котором находится этот файл .pdb, чтобы pymol мог видеть все ваши файлы есть.
Конечно, вы также можете запустить pymol из командной строки после первого перехода в каталог, где находятся ваши файлы, но я думаю, что вам нужно решение с графическим интерфейсом, поэтому вам нужно немного отредактировать: -)