通过 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 脚本中不起作用。否则,例如alias 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'

注意/./最后,

相关内容