【问题标题】:Issue with aliases in Terminal shell终端外壳中的别名问题
【发布时间】:2019-11-19 10:16:07
【问题描述】:

我已将 /bin/bash 设置为终端 (macos) 中的默认 shell,而我用 '~/.bashrc' 编写的别名不起作用(找不到命令)。

但是如果我在终端写/bin/bash命令,我会切换到新的bash3.2 shell,然后我可以使用它。

还有其他的 '.bashrc' 我应该在其中写下我的别名吗?

附:我使用终端首选项将 /bin/bash 设为默认值 还有chsh -s /bin/bash/ 命令。

【问题讨论】:

  • 来自 bash 手册页:For almost every purpose, aliases are superseded by shell functions.。改用函数。
  • @WilliamPursell :如果 .bashrc 根本没有来源,看起来就是这样,它也不会读取函数。
  • @eduard:首先验证 .bashrc 是否来自您的终端;现在看来,情况并非如此。将set -x 放在您的 .bashrc 顶部,然后打开一个新的终端会话。
  • 另外,在你的 bash shell 中,echo $BASH_VERSIONecho $- 说什么?
  • @user1934428 没错。我的评论不是为了回答这个问题(如果是,那将是一个答案!)我只是在评论不应再使用别名这一事实。几十年来,它们已被有效弃用。

标签: bash macos shell terminal alias


【解决方案1】:

您希望 /bin/bash -l 像使用登录 shell 一样运行。有关详细信息,请参阅 man bashINVOCATION 部分。

【讨论】:

  • 这不会运行 .bashrc。从 bash 手册页:当 bash 作为交互式登录 shell 或作为带有 --login 选项的非交互式 shell 调用时,它首先从文件 /etc/profile 读取并执行命令,如果该文件存在。读取该文件后,它会按顺序查找 ~/.bash_profile、~/.bash_login 和 ~/.profile
【解决方案2】:

Terminal 启动登录 shell 而不是“普通”交互式 shell,因为终端本身不是从从登录 shell 继承环境的 shell 中运行的。

普通交互shell源码.bashrc;登录 shell 获取它找到的 .profile.bash_login.bash_profile 中的第一个。我建议直接从.bash_profile 采购.bashrc

当您直接运行 /bin/bash 时,您的别名会起作用,因为这不会启动另一个登录 shell,因此 .bashrc 是按预期获取的。

【讨论】:

    【解决方案3】:

    如上,如果您将以下行添加到主目录中的.profile

    source ~/.bashrc
    

    一旦你保存它并创建一个新的终端会话,它会自动使用你的别名设置来获取你的.bashrc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 2013-08-01
      相关资源
      最近更新 更多