无法在 Mac OS 中创建永久别名

无法在 Mac OS 中创建永久别名

在 Linux 中,我可以向 bashrc 添加别名,它将成为永久别名。在 Mac OS 中,我尝试做同样的事情:

vim ~/.bashrc

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

话虽如此,我得到了这个:

$ alias
alias rvm-restart='rvm_reload_flag=1 source '\''/Users/alex/.rvm/scripts/rvm'\'''

那么我的别名在哪里prj?我重新启动了笔记本电脑,但什么都没有改变。

$ cat ~/.profile

export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH for scripting
test -f ~/.bashrc && source ~/.bashrc

$ cat ~/.bashrc
export PATH="$PATH:$HOME/.rvm/bin" # Add RVM to PATH f  or scripting
alias prj="cd ~/Documents/projects"

### Added by the Heroku Toolbelt
export PATH="/usr/local/heroku/bin:$PATH"

答案1

通常,bash仅将~/.bashrc启动脚本文件作为交互文件,未登录shell。
通常,bash~/.profile为交互式登录shell。
通常,Terminal.app 将新终端窗口视为交互式登录shell。
因此在正常情况下,只有你的~/.profile会被读取和执行;你的~/.bashrc永远不会被读取和执行。

~/.profile为了解决这个问题,我通常会创建名为(如果它尚不存在)的 shell 启动脚本,并将以下命令添加到该文件,以便它检查该~/.bashrc文件是否存在,然后来源如果它存在,则读取它并在当前 shell 进程中执行它,而不是子 shell):

test -f ~/.bashrc && source ~/.bashrc

按要求重新表述: Mac OS X 的终端应用程序通常bash以“登录”模式运行您的 shell ( )。当bash以登录模式运行时,它不会读取/执行~/.bashrc。相反,它会读取并执行~/.profile。如果您想将内容放入 中~/.bashrc并让它们在每个新的终端窗口中读取和执行,您需要创建一个名为 的 shell 脚本文件~/.profile,并让该文件包含一个查找~/.bashrc并读取和执行 的命令。

如果动词“source”让你困惑:“source”一个shell脚本文件是指一个shell(比如bash)从一个文件中读取shell命令并运行这些命令在当前 shell 进程中,因此它们会影响当前 shell 进程的环境。通常你编写的其他 shell 脚本文件不是来源;相反,它们是在子 shell(的单独实例或副本bash)中执行的,并且它们无法改变其父 shell 环境中的任何内容(bash当您打开新的终端窗口时启动的父 shell 的主实例)。

要让 shell 执行脚本,可以使用sourceshell 内置的命令。该source命令的快捷方式是.(是的,只是一个点/句号/句号字符)。在此答案的先前版本中,我使用了运算.符而不是命令source

答案2

您是打开了新的终端窗口还是source ~/.bashrc编辑后运行?当前终端需要更新路径/别名。

$ vim ~/.bashrc
alias prj='cd ~'
:x
$ alias
$ alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''
$ source ~/.bashrc
$ alias
$ alias prj='cd ~'
  alias rvm-restart='rvm_reload_flag=1 source '\''/Users/dx072/.rvm/scripts/rvm'\'''

相关内容