運行從任何地方打開相對文件路徑的應用程式

運行從任何地方打開相對文件路徑的應用程式

我有一個應用程序,在啟動時打開與可執行文件相關的文件(該文件路徑靜態編譯為程序二進製文件,我無法修改它)。我想為它創建一個別名,可以從系統中的任何位置運行,而無需先“cd”到它的資料夾中以確保找到文件。

這可能嗎?

答案1

如果程式要求您進入cd該目錄,且程式無法更改,則在不使用cd-ing 進入該目錄的情況下無法執行該程式。它是如此簡單。

但是,您可以啟動第二個 shell,即cd-s 到目錄並執行程式。當程式完成時,第二個 shell 終止,並且因為您的主 shell 沒有終止cd,所以您仍然在同一個地方。

舉個簡單的例子:

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

正如 Kamil Maciorowski 在評論中指出的那樣,這會將命令放入 shell 的 STDIN 中。如果程式不使用 STDIN(如pwd範例中所示),則此方法可以正常運作,並且不會檢查錯誤。

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

檢查錯誤並在失敗時提供正確的退出代碼cd

$ 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

如果您還想將參數傳遞給命令,別名會變得混亂,甚至更難以理解。在這種情況下。一個函數會更好:

$ 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>

相關內容