Ausführen einer Anwendung, die relative Dateipfade von überall öffnet

Ausführen einer Anwendung, die relative Dateipfade von überall öffnet

Ich habe eine Anwendung, die beim Start eine Datei relativ zur ausführbaren Datei öffnet (dieser Dateipfad wird statisch in die Programm-Binärdatei kompiliert und ich kann ihn nicht ändern). Ich möchte einen Alias ​​dafür erstellen, der von überall im System ausgeführt werden kann, ohne zuerst per „cd“ in den Ordner zu wechseln, um sicherzustellen, dass die Datei gefunden wird.

Ist das überhaupt möglich ?

Antwort1

Wenn das Programm erfordert, dass Sie cdin das Verzeichnis gehen, und das Programm nicht geändert werden kann, können Sie das Programm nicht ausführen, ohne cdmit -ing auf das Verzeichnis zuzugreifen. So einfach ist das.

Sie können jedoch eine zweite Shell starten, die mit -s auf das Verzeichnis verweist und das Programm ausführt. Wenn das Programm beendet ist, wird die zweite Shell beendet und Sie befinden sich immer noch an derselben Stelle, cdda Ihre Hauptshell dies nicht getan hat .cd

Ein kurzes Beispiel:

$ alias ptmpdir="bash <<< 'cd /tmp ; pwd'"
$ ptmpdir
/tmp

Dies, wie Kamil Maciorowski in den Kommentaren anmerkt, platziert den Befehl in STDIN der Shell. Dies funktioniert einwandfrei, wenn das Programm STDIN nicht verwendet, wie pwdim Beispiel, und es nicht auf Fehler prüft.

alias lstmpdir="bash -c 'cd /tmp && ls' ls"

prüft auf Fehler und gibt den richtigen Exit-Code aus, wenn dies cdfehlschlägt:

$ alias ptmpdir="bash -c 'cd /hop && ls' ls"
$ if ptmpdir ; then
> echo yes
> else
> echo no
> fi
ls: line 0: cd: /hop: No such file or directory
no

Wenn Sie dem Befehl auch Argumente übergeben möchten, wird der Alias ​​unübersichtlich und noch schwerer zu verstehen. In diesem Fall wäre eine Funktion besser:

$ hop(){ bash   -c 'cd /tmp && exec ls "$@"' ls "$@" ; }
$ hop
7iCipjf8J7         eh._2700550        in.clean.1285563                          tmp-ntt.xpi
MozillaMailnews    <rest deleted>

$ hop -lrt
total 56496
drwxrwxr-x 3 ljm      ljm          4096 Nov  5 17:28 gimp
drwxrwxr-x 2 ljm      ljm          4096 Nov  5 18:14 jna-107183
-rw------- 1 ljm      ljm             0 Nov  6 00:17 config-err-Ol5gyl
drwx------ 2 ljm      ljm          4096 Nov  6 00:17 ssh-FqqWxHh4jhu8
<rest deleted>

verwandte Informationen