在我的 中~/.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_aliases
shell 選項。
您可以在以下目錄中為這些執行檔建立軟連結$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'
注意/./
最後,