我在 .bash_login 中添加了一些 cd blah blah 命令作为别名,以便于更改目录。它工作正常。但突然间,其中的所有别名都不起作用了。它说找不到命令。我不知道为什么它突然停止工作。有什么建议吗?(我确实重新启动了系统)
抱歉,我其实想写的是 .bash_login
答案1
别名不会被导出。也就是说,在一个 shell 中定义的别名不是任何子 shell 继承的环境的一部分。因此,定义别名的最佳位置是 ~/.bashrc 中,而不是 ~/.bash_profile 或 ~/.profile 中,因为前者将被任何交互式 shell 引用,而后两者将仅由登录 shell 引用。
答案2
使用alias
shell 中的命令来确认它们是否确实被创建了。另外,您只是在使用 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