我在ubuntu中找不到.bash_profile


67

.bash_profile/home/user目录中的Ubuntu 14.04中找不到。我使用ls -a命令查看了.bash_profile,但是没有这样的文件。


1
您应该~/.profile改用。
muru


1
缺少一些配置文件(甚至目录)是很常见的。在这种情况下,应读取它们的软件将使用默认配置和/或读取其他源来检索该配置。如果要修改一个不存在的配置文件,只需先创建它即可。
Bakuriu 2014年

Answers:


84

Ubuntu使用~/.profile

您可以.bash_profile在Ubuntu中创建您的文件,但.profile不会被读取。

如果我们阅读.profile内容:

cat ~/.profile

输出

# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.

所以用~/.profile代替~/.bash_profile


.profile对我不起作用。vim ~/.bashrc然后我必须编辑.bashrc . ~/.bashrc
Nahid

使用.bash_profile在Ubuntu上不起作用。它使用Dash作为GUI登录shell,而不是Bash,因此不会读取bash_profile。
乔纳森·哈特利

如果您编辑.profile,则需要注销并再次登录以查看更改。
乔纳森·哈特利

8

当调用登录shell时,bash将按以下顺序查找其配置文件:

[0] ~/.bash_profile
[1] ~/.bash_login
[2] ~/.profile

找到第一个后,将停止寻找其他人,所以如果有一个.bash_profile在我$HOME的bash不会寻找.bash_login.profile了。

在这三个文件名中,Ubuntu默认使用以下名称.profile将其重命名为.bash_profile

mv ~/.profile ~/.bash_profile

现在,如果我们使用打开一个新的bash shell bash -lsu - $USERsudo -u $USER -i或者运行bash作为登录shell任何其他命令,~/.bash_profile将得到采购。

重要说明:

到目前为止,我所说的仅适用于Bash本身,当您从GUI登录系统时,显示管理器负责提供正确的文件。

gdm3如果我们看一下,Ubuntu将用作它的显示管理器:/etc/gdm3/Xsession我们可以看到,除了.profile

# First read /etc/profile and .profile
for file in /etc/profile "$HOME/.profile"; do
  if [ -f "$file" ]; then
    source_with_error_check "$file"
  fi
done

因此,如果您使用GUI登录,请将该文件保留在.profile名称下,否则您可能会错过环境中的某些变量和设置。

我猜更好的选择是创建一个符号链接到.profile

ln -s ~/.profile ~/.bash_profile

现在您的数据保存在.profilegdm不会丢失任何东西,.bash_profile实际上是bash加载.profile,通过编辑它们中的每一个,您可以获得相同的结果。

缺少.profile?

如果您没有.profile,请从这里获取它的副本:

cp /etc/skel/.profile ~/.profile

要么

# Remember the note above
cp /etc/skel/.profile ~/.bash_profile

但是,如果Bash首先寻找〜/ .bash_profile,那么为什么在Ubuntu中不这样做呢?Ubuntu修改了Bash吗?这似乎很奇怪。man bashUbuntu上的内容仍然描述了它将如何首先查找.bash_profile。
乔纳森·哈特利

.bash_profile 首先查找找不到(因为它不存在),然后又.bash_login找不到(因为Ubuntu不使用这两个名字),最后查找,.profile是的。因此,如果创建一个.bash_profilein,~则将覆盖ubuntu ~/.profile,这是bash的默认行为,此处未做任何修改。
Ravexina

对,那也是我一开始的想法!您所说的确实发生在RHEL上。但是在Ubuntu上却没有。如果创建一个.bash_profile,则不会读取。我只是意识到这是因为Ubuntu不再使用“ Bash”作为GUI登录外壳。它改用“ Dash”。我认为自从18.04开始,这就是事实。
乔纳森·哈特利

您在这里错过了重点。实际上,我们是在谈论bash本身,在这里我要说的是Ubuntu创建的是'.profile'而不是其他文件,因此,如果我们打开一个新的bash shell(登录shell),那么读取这些文件的顺序就不会了。无论我们使用什么发行版。:)
Ravexina

如果读者按照您的答案建议将.profile重命名为.bash_profile,那么对于Ubuntu上的用户,该文件在登录或打开终端时都不会读取。您已经破坏了他们的系统。读取文件的唯一方法是,如果它们使用'--login'arg启动bash会话以明确地使其成为登录shell。那将永远不会在他们的桌面上自动发生。
乔纳森·哈特利

5

这意味着该文件不存在。但是,bash如果bash作为登录shell调用,则可以创建文件并执行/获取文件。因此,每次您通过shell登录(例如,通过ssh)。

如果您希望每次打开终端时都执行内容,则应.bashrc改为修改文件。


你能知道为什么为什么缺少.bash_profile文件吗?
Roledenez

您可以从/etc/skel/目录复制它。
Frantique 2014年

这是规范的设计说明。但是,这并不意味着不能做到。
2014年

.bash_profile在对其他答案的评论中解释了在Ubuntu上缺少(并且不起作用)的原因。
乔纳森·哈特利

2

~/.profile代替~/.bash_profile我使用的最佳答案对我不起作用。

修改.bashrc工作

只是:

vim ~/.bashrc

注意:我正在使用Ubuntu WSL。


在正版Linux中,当您登录到GUI或远程连接或登录到控制台时(即在按ctrl + shift + F2之后),将应用.profile。它应该代表您首次登录计算机,并创建一个外壳程序,该外壳程序是随后创建的所有其他进程的父级。我怀疑在WSL上没有这样的东西,因此您的.profile可能永远不会被读取。
乔纳森·哈特利

我也是。~/.profile只是默认情况下没有在ubuntu 18.04中加载
javapowered

0

如果您的意思是.bashrc,则会在您的主文件夹中找到它。如果不存在,则可以将其从/ etc / skel文件夹复制到主文件夹。

如果您需要有关此主题的更多信息,请访问stefaan lippens页面。

http://stefaanlippens.net/bashrc_and_others

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.