Wie ändere ich das Arbeitsverzeichnis, wenn ich eine Datei mit einem Doppelklick auf den Ubuntu-Desktop öffne?

10

Wollte eine Datei (.pdb-Datei: Proteinstrukturformat, egal) per Doppelklick öffnen.

Das "Öffnen mit" wird manuell angewiesen, "Pymol" (ein Programm, das das PDF-Format öffnet) mit Ubuntu Tweak auszuführen.

Allerdings fand ich , dass das Arbeitsverzeichnis ist $ HOME.

Da andere Dateien in dem Verzeichnis, in dem ich die Datei geöffnet habe, von entscheidender Bedeutung sind, möchte ich auf sie zugreifen.

Ich vermute, dass das "Pymol" auf $ HOME ausgeführt wird, während der absolute Pfad der "pdb-Datei" (Doppelklick-Datei) als Argument übergeben wird.

Ich denke, das ist ein allgemeines Problem und stelle eine Frage:

Wie kann ich das System das "Arbeitsverzeichnis" in das "Verzeichnis, in dem ich auf die Datei geklickt habe" ändern und ein Programm ausführen lassen?

Seungpyo Hong
quelle

Antworten:

16

Obwohl dies Jahre später ist, hat Folgendes für mich funktioniert:

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

% k gibt Ihnen den Pfad des Verzeichnisses des Launchers an, den Sie gerade gestartet haben.

TuxForLife
quelle
1
Das% k hat nicht funktioniert (noch% d), aber ich brauchte den Bash-C-Teil
Marc Van Daele
1
Ich bin froh, dass ich indirekt helfen kann. Sie benötigen den Teil bash -c, um ihn ~richtig zu definieren . Sie brauchen bash -c nicht, wenn Sie den Pfad direct / home / marc verwenden.
TuxForLife
1
bash -c hat den Job gemacht. hat mir sehr geholfen danke :)
Muthu
2
% K wird in den vollständigen Pfad einschließlich der Desktop-Datei aufgelöst und cd "%k"funktioniert daher nicht. Aber du kannst verwenden cd "$(dirname %k)".
ivant
Ich bin verwirrt, warum gehen Sie mit "% k" in ein Verzeichnis und der Befehl unmittelbar danach &&führt etwas relativ zu aus ~?
vdegenne
5

Keine der oben genannten Lösungen funktionierte auf meinem Debian. Auch %dist veraltet. Siehe Desktop-Eintragsspezifikation .

Ich verwende also das folgende Bash-Skript, um Pymol auszuführen. Zuerst müssen Sie die folgende Bash-Skriptdatei erstellen und in speichern /usr/local/bin/run_pymol.sh. Ich habe die Datei gespeichert, /usr/localweil sie anscheinend xdg-opennicht versteht, was das HOME-Verzeichnis ist oder so weiter.

#!/usr/bin/env bash
# change working directory
cd `dirname $1`
# run pymol
/usr/bin/env pymol $@

Geben Sie zweitens die ausführbare Berechtigung für diese Datei. Öffnen Sie ein Terminal und geben Sie die folgenden Befehle ein, um eine Berechtigung zu erteilen und zu bestätigen.

% chmod +x /usr/local/bin/run_pymol.sh
% run_pymol.sh

Ändern Sie schließlich Ihre pymol.desktopDatei wie folgt und Ihr Pymol startet in dem Verzeichnis, in dem sich die erste angegebene Datei befindet.

#!/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;

Hoffe es hilft euch :-)

Λlisue
quelle
3
Ich konnte setzen Path=/my/pathund das hat gut funktioniert. Path - If entry is of type Application, the working directory to run the program in.
Ripster
2

Ich verstehe nicht, warum die Lösung dort oben so positiv bewertet wurde, dass sie absolut etwas anderes macht. Es ändert das Arbeitsverzeichnis in das Verzeichnis, in dem sich die .desktop-Datei befindet, während die Frage das Arbeitsverzeichnis in das Verzeichnis mit geöffneten Dateien ändern sollte.

Meine Lösung:

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

Beachten Sie, dass das Festlegen von env-Variablen für .desktop-Dateien anders ist

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

Sie können /usr/share/applicationsdie richtige file.desktopDatei aufrufen , die aufgerufen wird, wenn Sie einen bestimmten Dateityp öffnen. Bearbeiten Sie es dann und execfügen Sie es in der Zeile cd PATH &&zum Zeilenanfang hinzu.

Mostafa Shahverdy
quelle
-1

OK -

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

hat bei mir nicht funktioniert, da PATH nicht so definiert ist, dass es auf den Pfad von% F zeigt. Die einzigen Variablen, die in einer Anwendungsdesktopdatei verfügbar sind, sind:

  • % fa einzelner Dateiname.
  • % F mehrere Dateinamen.
  • % ua einzelne URL.
  • % U mehrere URLs.
  • % da einzelnes Verzeichnis. Wird in Verbindung mit% f verwendet, um eine Datei zu finden.
  • % D mehrere Verzeichnisse. Wird in Verbindung mit% F zum Suchen von Dateien verwendet.
  • % na einzelner Dateiname ohne Pfad.
  • % N mehrere Dateinamen ohne Pfade.
  • % ka URI oder lokaler Dateiname des Speicherorts der Desktop-Datei.
  • % v der Name des Geräteeintrags.

Da ist es:% d ist das einzelne Verzeichnis, nach dem Sie suchen, da es keinen Sinn macht, in mehrere Verzeichnisse zu wechseln. Gehen Sie also zu / usr / share / applications und bearbeiten Sie die Datei application-name.desktop (in Ihrem Fall pymol.desktop). Dazu müssen Sie über Superuser-Berechtigungen verfügen. Suchen Sie dann die Zeile, die mit "Exec =" beginnt. Es liest sich wahrscheinlich

Exec=<application-name> %F

(In Ihrem Fall Exec = Pymol% F). Ändern Sie diese Zeile in

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

Speichern Sie diese Desktop-Datei. Wenn Sie das nächste Mal auf eine PDF-Datei klicken, sollte Ihr Arbeitsverzeichnis dasjenige sein, in dem sich diese PDF-Datei befindet, damit Pymol alle Ihre Dateien dort sehen kann.

Natürlich können Sie pymol auch über die Befehlszeile starten, nachdem Sie zuerst zu dem Verzeichnis navigiert haben, in dem sich Ihre Dateien befinden, aber ich denke, Sie wollten eine GUI-Lösung, also müssen Sie ein wenig bearbeiten :-)

user147058
quelle