我有一個應用程序,在啟動時打開與可執行文件相關的文件(該文件路徑靜態編譯為程序二進製文件,我無法修改它)。我想為它創建一個別名,可以從系統中的任何位置運行,而無需先“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>