Как изменить рабочий каталог при открытии файла двойным нажатием на рабочий стол Ubuntu?


10

Хотел открыть файл (файл .pdb: структура белка, неважно) двойным щелчком мыши.

«Открыть с помощью» направляется вручную для запуска «pymol» (программы, открывающей формат .pdb) с помощью Ubuntu Tweak.

Однако я обнаружил, что рабочим каталогом является $ HOME.

Поскольку другие файлы в каталоге, который я открыл, имеют решающее значение, я хочу получить к ним доступ.

Я предполагаю, что "pymol" выполняется в $ HOME, в то время как абсолютный путь к файлу "pdb" (файл двойного щелчка) передается в качестве аргумента.

Я предполагаю, что это несколько общая проблема и задаю вопрос:

Как я могу позволить системе изменить «рабочий каталог» на «каталог, в котором я щелкнул файл» и запустить программу?

Ответы:


16

Хотя это спустя годы, вот что сработало для меня:

Exec=bash -c 'cd "%k" && ~/path/to/your/file'

% k дает вам путь к каталогу только что запущенного модуля запуска.


1
% k не работал (ни% d), но мне нужна была часть bash -c
Марк Ван Деле

1
Рад, что могу помочь косвенно. Для ~правильного определения вам нужна часть bash -c . Вам не нужен bash -c, если вы используете прямой путь / home / marc.
TuxForLife

1
bash -c сделал работу. очень помог мне спасибо :)
Muthu

2
% K разрешает полный путь, включая файл рабочего стола, поэтому cd "%k"не будет работать. Но вы можете использовать cd "$(dirname %k)".
Иван

Я запутался, почему вы идете в каталог, используя "% k", а затем команда сразу после &&выполнения чего-то относительно ~?
vdegenne

5

Ни одно из вышеуказанных решений не сработало на моем 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
Я был в состоянии поставить, Path=/my/pathи это работало просто отлично. Path - If entry is of type Application, the working directory to run the program in.
Рипстер

2

Я не понимаю, почему решение там так проголосовало, оно делает абсолютно разные вещи. Он меняет рабочий каталог на тот, где находится файл .desktop, в то время как вопрос о том, чтобы изменить рабочий каталог на тот, у которого открыт файл (ы).

Мое решение:

Exec=/bin/bash -c 'cd $(dirname $0) && micro $0'

Имейте в виду, что установка переменных env для файлов .desktop отличается, например, так

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

0

Вы можете пойти /usr/share/applicationsи найти правильный, file.desktopкоторый вызывается всякий раз, когда вы открываете файл определенного типа. Затем отредактируйте его и в execстроке добавьте cd PATH &&в начало строки.


-1

ХОРОШО -

Exec=cd PATH &&  <application-name> %F

у меня не сработало, поскольку 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

(В вашем случае Exec = pymol% F). Измените эту строку на

Exec=cd %d && <application-name> %F

Сохраните этот файл рабочего стола, и в следующий раз, когда вы нажмете на файл .pdb, ваш рабочий каталог должен быть тем, в котором находится этот файл .pdb, так что pymol сможет увидеть все ваши файлы там.

Конечно, вы также можете запустить pymol из командной строки после первого перехода в каталог, где находятся ваши файлы, но я думаю, что вам нужно решение с графическим интерфейсом, поэтому вам нужно немного отредактировать :-)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.