透過 bash 在 OS X 中為應用程式添加別名的正確方法是什麼?

透過 bash 在 OS X 中為應用程式添加別名的正確方法是什麼?

在我的 中~/.bashrc,我有幾個別名,例如:

alias emacs='/Applications/Aquamacs.app/Contents/MacOS/Aquamacs'
alias octave='/Applications/Octave.app/Contents/Resources/bin/octave'
alias wine='/Applications/Wine.app/Contents/Resources/bin/wine'
alias simion='wine "/Users/hpek/.wine/drive_c/Program Files/SIMION 8.0/simion.exe"'
alias inkscape='wine "/Users/hpek/.wine/drive_c/Program Files/Inkscape/inkscape.exe"'

我認為這不是正確的做法。別名在 bash 腳本中不起作用,並且當通過brew或安裝某些內容時apt-get,它不會創建這樣的別名。

這樣做的正確方法是什麼?

答案1

依照設計,別名在 shell 腳本中不起作用。否則,egalias rm='rm -i'將破壞大多數 shell 腳本。

無論如何,要啟用它們,請設定expand_aliasesshell 選項。


您可以在以下目錄中為這些執行檔建立軟連結$PATH

ln -s /Applications/Aquamacs.app/Contents/MacOS/Aquamacs /usr/bin/aquamacs

然後只需鍵入新的命令名稱(例如aquamacs)即可運行它們。

這將允許獨立於您的 shell 使用這些命令。


請注意,對於常規 OS X 應用程序,打開它們的非阻塞方式是open -a ProgramName,例如open -a Aquamacs。它使用啟動服務的程式資料庫(例如,提供用於使用非預設編輯器開啟某個檔案的程式選擇)並知道應用程式的安裝位置。

答案2

這是正確的做法,只是為了「它」的價值與你想要實現的目標不同。 (別名幾乎只用於互動使用。)

在 Mac 上開啟應用程式套件的方法是使用open -a ${appname},因此您可以/應該將您的 emacs 別名替換為alias emacs='open -a aquamacs',將 inkscape 替換為open -a wine '/Users/hpek/.wine/...'

不過,擁有直接可執行二進位檔案的方法emacs是在您的$PATH.我傾向於小腳本:

#!/bin/sh
exec /usr/bin/open -a octave "$@"

這以“mac”方式打開應用程序,透過它傳遞所有命令列參數,並且可以從包括其他進程在內的任何內容執行。

但是,如果您只關心 shell,則 shell 函數比別名更“正常”,因為它們可以在 bash 中的更多情況下觸發:

function octave() { /Applications/Octave.app/.../bin/octave "$@"; }
function octave() { open -a octave "$@"; }

答案3

簡單的解決方案是在 中添加以下命令.bash_profile

alias rstudio='open -a /Applications/RStudio.app/Contents/MacOS/RStudio "$@"'

這將允許程式 RStudio 打開傳遞.R給命令的任何現有文件

答案4

假設我有一個python3.6在資料夾內調用的可執行檔:

/Users/doekewartena/.pyenv/versions/3.6.0/bin/

然後我可以這樣做:

alias python36='/Users/doekewartena/.pyenv/versions/3.6.0/bin/./python3.6'

注意/./最後,

相關內容