.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 ~/.bashrcbash_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.