.bash_profile 中的别名不起作用

.bash_profile 中的别名不起作用

我在 .bash_login 中添加了一些 cd blah blah 命令作为别名,以便于更改目录。它工作正常。但突然间,其中的所有别名都不起作用了。它说找不到命令。我不知道为什么它突然停止工作。有什么建议吗?(我确实重新启动了系统)

抱歉,我其实想写的是 .bash_login

答案1

别名不会被导出。也就是说,在一个 shell 中定义的别名不是任何子 shell 继承的环境的一部分。因此,定义别名的最佳位置是 ~/.bashrc 中,而不是 ~/.bash_profile 或 ~/.profile 中,因为前者将被任何交互式 shell 引用,而后两者将仅由登录 shell 引用。

答案2

使用aliasshell 中的命令来确认它们是否确实被创建了。另外,您只是在使用 Mac Terminal.app 程序吗?选项中的某个地方应该有一个设置,您可以将其配置为使用所谓的登录 shell。这就是 .bash_profile 文件的来源。

答案3

启动时,您的 shell 可能未读取 .bash_profile 文件。许多发行版的默认 .bashrc 中都有类似以下内容:

if [ -f ~/.bash_profile ]; then
        . ~/.bash_profile
fi

如果您只是将它用作别名,我建议您将文件命名为~/.bash_aliases:

if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
fi

它所做的就是检查文件是否存在,如果存在,则执行其中的命令。对于你的情况,就是别名命令。将其弹出到你的 .bashrc 中,你的问题就解决了。

编辑:实际上情况比这更复杂一些。我的解决方案可行,但这篇文章值得一读.bash_profile 与 .bashrc

PS:在 *nix 系统上,很少需要重启来修复问题。最多注销并登录即可。

答案4

如果您想让更改目录变得更容易,请查看$CDPATH

CDPATH The search path for the cd command.  This is a colon-separated list of
       directories in  which  the shell looks for destination directories
       specified by the cd command. A sample value is ".:~:/usr".

使用上面的示例,将以下内容添加到您的个人资料:

CDPATH=.:~:/usr

那么,无论您位于哪个目录中,您都可以轻松访问~或的子目录/usr

$ pwd
/var/log
$ cd bin
$ pwd
/usr/bin

相关内容