在我的 中~/.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_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'
注意/./
最后,