.bash_profile中定义的别名在OS X中不起作用

时间:2016-04-07 18:15:10

标签: macos bash shell .bash-profile

我在.bash_profile中定义了三个别名但我的bash shell没有读取它。定义的别名在我的终端中不起作用,我无法解决此问题。

alias handybook="cd /Users/rsukla/development/repos/handybook/"

此行在.bash_profile内定义,但在我的shell中无效。

到目前为止我尝试过的事情:

  • 我创建了.bashrc文件并定义了别名,但它也无效。

  • 如果我使用source ~rsukla/.bash_profile,则别名工作正常,但我想永久使用别名,所以每次打开shell时都不必使用source

当我在alias中定义时,知道.bash_profile为什么不起作用的地狱?

2 个答案:

答案 0 :(得分:4)

假设:

  • 您使用OS X的原生终端,Terminal.app或热门替代iTerm2
  • bash确实是你的shell(在OS X上是默认的)

然后 ~/.bash_profile 应为每个交互式shell加载 ,因为两个终端程序默认创建登录 shell 即可。
Bash 登录 shell来源~/.bash_profile,但不是~/.bashrc

请注意,此与大多数 Linux 发行版不同,其中单个登录shell在启动时执行 ,以后的交互式shell是非登录 shell,只加载~/.bashrc,而不是~/.bash_profile
确保在 登录和非登录交互式shell中加载定义的常见技术是将定义放在~/.bashrc中,然后从~/.bash_profile中获取,使用以下行:
[[ -f ~/.bashrc ]] && . ~/.bashrc

您可以通过从现有shell执行bash -l来按需创建登录shell;如果加载你的别名,那么问题必须是你的默认shell和/或终端程序的配置方式。

  • echo $SHELL告诉您默认的shell是什么。
  • 如果您使用Terminal.app,Terminal > Preferences...,标签General,则设置Shells open with会告诉您是使用默认shell还是自定义shell。

答案 1 :(得分:1)

我们仍然不知道为什么不会自动加载别名。

您的别名应该从.bash_profile加载。这是OS X中bash的默认行为。

mklement0their answer in this thread中详细了解了该问题。

一个hacky解决方法

打开终端的偏好设置。您可以使用以下命令指定启动shell的命令:

terminal preferences

每次在shell打开时指定要提供的文件时,不必手动获取dotfiles。以下是bash的选项列表:

Usage:  bash [GNU long option] [option] ...
    bash [GNU long option] [option] script-file ...
GNU long options:
    --debug
    --debugger
    --dump-po-strings
    --dump-strings
    --help
    --init-file
    --login
    --noediting
    --noprofile
    --norc
    --posix
    --protected
    --rcfile
    --restricted
    --verbose
    --version
    --wordexp
Shell options:
    -irsD or -c command or -O shopt_option      (invocation only)
    -abefhkmnptuvxBCHP or -o option

您可以考虑使用/bin/bash --rcfile alias_file_of_yours或类似内容。

如果您需要使用cd命令的别名,请转到goat

作为附注,我建议您查看goat。它可以让您轻松管理这些cd别名。

我用它而且我写了它。