.bashrc打开新终端时未执行


84

当我在Ubuntu 12.04中打开新的终端窗口时,.bashrc中的代码不执行。创建.bash_aliases文件时,我注意到了这一点。当我打开一个新终端时,别名没有显示。但是,当我键入时source .bashrc,别名确实出现了。

.bashrc每次我打开一个新的终端窗口时都应该运行吗?

我如何做到这一点?


尝试改用.profile。
— jippie 2012年

4
@jippie不,.profile在登录时读取,而不是在打开新终端时读取,除非某个地方配置错误。Selah:您是否更改了默认配置?请ps -o command $$ $PPID在终端中运行并复制粘贴输出。
— 吉尔斯

1
只是为了肯定起见,您要放入.bashrc主文件夹,对吗?
— 2012年

可能要检查echo $SHELL。这发生在我身上,外壳是/ bin / sh而不是bash。在/ etc / passwd及其运行的.bashrc中修复它。
— 乔·弗林

Answers:


128

它不一定运行;在标准.bashrc的顶部是此注释:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

我相信可以选择是否将bash终端作为登录shell运行。对于Ubuntu,gnome-terminal通常不作为登录Shell运行,因此.bashrc应该直接运行。

对于登录外壳程序(如虚拟终端),通常~/.profile运行文件,除非您具有~/.bash_profile或~/.bash_login,但默认情况下它们不存在。默认情况下,Ubuntu仅使用.profile。

该标准~/.profile包含以下内容:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

如果可用,它将运行.bashrc-假定环境中存在$ BASH_VERSION。您可以通过输入命令进行检查echo $BASH_VERSION,它应该显示有关版本号的信息-它不能为空。


4
了解了这些说明之后,我进入了终端应用程序,然后以编辑->配置文件首选项->标题和命令->运行命令作为登录外壳。我没有勾选。谢谢您的帮助。
— Selah 2012年

您能否澄清何时加载/读取.profile(因此为.bashrc)?当用户登录到其桌面会话时,似乎已完成。答案表明,当您启动新的终端程序/外壳程序会话“对于登录外壳程序(如虚拟终端机),通常运行文件〜/ .profile ...”时,会发生这种情况
— 猬

4
它通常在启动新的登录Shell时运行(不是真正的桌面会话,因为您可以从桌面会话运行新的登录Shell)。正如我所说的,它是默认运行的,但是如果您创建了~/.bash_profile或则不会运行~/.bash_login。您可以通过选中或取消选中中的复选框进行测试Edit -> Profile Preferences -> Title and Command -> "Run command as a login shell,然后退出然后重新运行终端。您可以从.profile中回显某些内容以进行测试。
— 马蒂·弗里德

@Selah您的评论给了我更多的帮助,而不是实际的答案;)非常感谢您的评论!
— Aleks 2014年

因此,如果您已经在系统上创建了~/.bash_profile或~/.bash_login并希望保留它们,但仍然希望~/.profile从那里~/.bashrc执行,则可以从您自己的系统~/.bash_profile或~/.bash_login包含的行中获取它source "$HOME/.profile"。还可以在登录shell中返回ls的彩色输出!
— tanius

26

就我而言,只是.bashrc在.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

我手动添加了它,并与我的新登录名一起使用


3
.bash_profile?Ubuntu .profile默认使用a ,而不是.bash_profile。
— 大师

ubuntu服务器通常不拾取.bashrc ...上面的方法也可以... cat .bash_profile [[-s“ $ HOME / .bashrc”]] &&来源“ $ HOME / .bashrc”#加载默认值
— Scott Stensland

这为我解决了!我添加了pcre,似乎它覆盖了bash配置文件,而不是添加了它。
— shapiro yaacov

7

.bash_profile保存bash shell的配置。当您打开终端时,它首先从中读取并执行命令~/.bash_profile。因此,您可以添加以下内容.bash_profile来根据bashrc设置外壳。

. ~/.bashrc

除非您的终端运行的是登录外壳程序(在Ubuntu中默认情况下~/.bash_profile不存在),否则不会被读取(在Ubuntu中默认情况下不存在)
— muru 2017年

5

如果$BASH_VERSION未设置,请尝试使用chsh命令将shell设置为/bin/bash。

我在12.04 LTS上遇到了类似的问题,结果是新用户帐户的默认Shell设置为/bin/sh,这就是问题的原因。


这就是原因!
— mulya

1

对.profile中的注释进行编码

〜/ .profile:由命令解释器执行以登录shell。¬11如果存在〜/ .bash_profile或〜/.bash_login¬10#,则bash(1)不会读取此文件。

因此,您可以执行这些操作,如果~/.bash_profile或~/.bash_login exists,那么它们将代替~/.profile

如果你想运行~/.bashrc只需要添加的行source ~/.bashrc中bash_profile


1
我遇到了完全相同的问题。我.bashrc正在来源,直到我创建了一个.bash_profile文件。所以我source ~/.bashrc 在.bash_profile文件前加了行。
— 拉沙

0

无需进行所有操作,只需Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"在“自定义”命令框中编写bash并关闭它即可。下次打开终端时,它也会自动运行bash。


您指的是哪个GUI?地精还是团结
— Nic Wanavit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.