开机不能自动加载 ~/.bash_profile 文件的解决方法
Tofloor
poster avatar
fungleo
deepin
2017-11-06 18:05
Author
这个事情非常搞笑,当我把系统根据我的配置搞好之后,我就关机重启了一下。然后,我就发现,我设定的那些命令都失效了。
很明显。这说明我们配置的 ~/.bash_profile 文件没有加载,只需要重新执行一下 . ~/.bash_profile 就可以了。但是如果每次启动都要这样运行一次,我感觉还是蛮扯淡的。
我的第一反应是,这应该是 deepin linux 的一个 BUG。本着没有能力开发也要大力配合开发的态度,我去官方提交了一个关于这个问题的用户反馈。
然后我想,肯定不会是我一个人遇到这个问题。于是在深度论坛一搜索,我去,很多人都在说这个问题。
但让我奇怪的是,官方或者是非官方的大神从来不解决这个问题,而是上来一顿训斥,告诉提问者,你这是不对的!系统启动就不应该执行这个文件!
哎呀我去!
虽然我读书少,但你们不能骗我对吧!我用的 mac os 也好 arch linux 都是这样设置,而从来没有人给我说过这样不行,到你这,怎么这么多理由呢?
另外,.bashrc 文件是每次打开一个新的终端窗口的时候执行的。而.bash_profile 文件是每次登录用户的时候执行一次。很明显,我们设定的一些参数,不是每开一个窗口都需要去设定一次,只需要我们登录的时候执行一次就可以了呀!所以我坚定的把命令放在 .bash_profile 文件里,而绝不放到 .bashrc 文件里。
但是如上图所示,他们跟我耍流氓,说图形界面启动是非登录模式,既然是非登录模式,不执行是非常有道理的!
我一口老血喷出三里地呀!
我们要的是解决问题,而不是让你告诉我们,我们的问题不是问题!
靠人不如靠自己。打开谷歌开始找资料,终于在 deepin 官方的 github 提问里找到如下的解决方案:
根据上图给出的方案,我们进行设置:
  1. # 编辑文件
  2. vim ~/.config/deepin/deepin-terminal/config.conf
  3. # 找到第56行,讲 false 修改为 true
  4. run_as_login_shell=true
  5. # :wq 保存退出
  6. :wq
Copy the Code
注销系统后重新登录,问题解决。
首发地址:http://blog.csdn.net/FungLeo/article/details/78454761
本文由FungLeo原创,允许转载,但转载必须附注首发链接。谢谢。

Reply Favorite View the author
All Replies
avatar
fungleo
deepin
2017-11-06 19:31
#1
我很奇怪你们的思维,我不想知道这个区别,我更不想写到 .bashrc 文件里面。最最不想做的事情是,写到 /etc/bashrc 里面

我们就想解决开机不加载 .bash_profile 问题,然后我解决了,又来给我解释什么登录模式。

那我反问一下,arch ,mac 怎么就都可以呢?它们没人告诉我什么登录模式不模式的。

我只是想强调,当一个人遇到问题了之后,想的首先是如何去解决问题,而不是这个问题到底是不是问题。

以上。
Reply View the author
avatar
fungleo
deepin
2017-11-06 19:35
#2
这就好比,我想要游过一条河,然后请教大家,我如何游过去。

结果来了一群人告诉我,不要游,游是不对的,应该走那边的桥。

我说我就想游过去。

它们非要告诉我,你不能游,你懂不懂,我建议你了解一下,人是应该走桥的,而不是游过去的。

算了,你们接着聊,我已经游过去了。
Reply View the author
avatar
DebuggerX
deepin
2017-11-06 19:47
#3
本帖最后由 debuggerx 于 2017-11-6 11:48 编辑
https://bbs.deepin.org/post/147762
这就好比,我想要游过一条河,然后请教大家,我如何游过去。

结果来了一群人告诉我,不要游,游是不对的, ...

虽然好像你文笔很好,而且正在兴头上现在说你的不是估计也是听不进去 ╮(╯▽╰)╭
但是,你这问题本来就跟你那截图里的不是同一个问题啊……如果我没搞错情况的话,感觉你完全就是搞错了问题本身然后错怪别人还说别人耍流氓,这实在太伤人了吧。
那如果你坚持“只要解决问题,不要原理”,那么基于你的情况我会说:
直接把你的那个.bash_profile改名成.profile试试
至于原因?我不知道╭(╯^╰)╮
Reply View the author
avatar
fungleo
deepin
2017-11-06 21:02
#4
https://bbs.deepin.org/post/147762
虽然好像你文笔很好,而且正在兴头上现在说你的不是估计也是听不进去 ╮(╯▽╰)╭
但是,你这问题本来就 ...

我不愿意伤人,只是昨天晚上整了一个晚上都没有解决问题,今天上午才解决这个问题。找来找去,一直在解释登录非登录什么的。所以我感觉这是在耍XX。

我不是不管原理。原理看了这么多资料肯定已经知道了。

但,解释原理有什么用呢?还是没有解决问题呀,我就是想要 .bash_profile 生效呀。至于为什么,我就是这么犟呀。我希望无论是mac还是arch还是我接下来准备在全公司推广的deepin,都是一个习惯呀。

再者,无论是加载还是不加载,都是有道理的。所以不用管道理了,就说说咋加载就完了。
Reply View the author
avatar
comzhong
deepin
2017-11-06 21:36
#5
本帖最后由 comzhong 于 2017-11-6 13:48 编辑

我觉得是你的提问方式有问题。(我是用户,不代表深度,看清楚!)

当然,你开始也许不知道什么 login 和 non-login,你问为什么不加载.bash_profile,别人指出是因为 使用了  non-login 方式,所以没有加载。这不是很清楚了吗?

non-login 方式不加载,改为 login 方式不就是了。那问题就变了,变成了:怎么改成 login 方式?
最后就是,为什么 deepin 要采用 non-login 方式,而不用 login 方式?


============================================
你搞这个马甲,我不知道你是怎么问的,看个例子,这回答完全没问题。

https://bbs.deepin.org/post/36571



============================================
最后,看看加载方式,默认是没有 .bash_profile 文件

1. non-login 方式
~$ su deepin
run /ect/bash.bashrc
run .bashrc

2.login 方式
~$ su - deepin
run /ect/profile
run /ect/bash.bashrc
run .profile
run .bashrc

=====复制 .profile 改名为 .bash_profile =========
3. non-login 方式
同1

4.login 方式
~$ su - deepin
run /ect/profile
run /ect/bash.bashrc
run .bash_profile
run .bashrc

1、2、3、4均有:
~$ bash
run /ect/bash.bashrc
run .bashrc
Reply View the author
avatar
comzhong
deepin
2017-11-06 22:12
#6
找到你图上的那个帖子了,来看看帖子是怎么说的。
https://bbs.deepin.org/post/143895



  1. /etc/profile 环境变量生效问题

  2. 设置了环境变量后  ,使用source /etc/profile生效后,每次关闭终端后,都需要重新输入source /etc/profile命令使环境变量生效,有这么坑的?
Copy the Code


我只能看出是一句抱怨,没有看出任何问问题的态度,也没有把需求问题明确提出来。

如果只是加载环境变量,deepin 的策略就是写入 .bashrc ,虽然都是 Linux 发行版,但不可能每个都完全一样,有些细节的地方基于不同的考虑而产生不同的差异。


要想别人帮你解决问题,明确的需求描述是最基本的。
Reply View the author
avatar
DebuggerX
deepin
2017-11-06 22:17
#7
https://bbs.deepin.org/post/147762
我不愿意伤人,只是昨天晚上整了一个晚上都没有解决问题,今天上午才解决这个问题。找来找去,一直在解释 ...

1.我还是认为你一开始查问题的时候就出了问题,没找到点子上,针对你这个问题的“针对性”解释应该是这个提问和解答:
Why doesn't my ~/.bash_profile work?
2.如果一定想让~/.bash_profile生效,那就在~/.profile里加载不就好了:
  1. if [ -n "$BASH_VERSION" ]; then
  2.     if [ -f "$HOME/.bash_profile" ]; then
  3.         . "$HOME/.bash_profile"
  4.     fi
  5. fi
Copy the Code

或者把上面的代码放到~/.bashrc里,效果也是一样的——虽然这就本末倒置了。。

3.我并不奢望每个人都有探究精神愿意去学习"原理",也不指望所有人能理解"老人不能直截了当给解决方法"的良苦用心,但是这样否定原理否定别人的善意实在让我心有不甘……我几年前作为纯粹的菜鸟
在论坛交流学习,受到不少前辈的引导指点,很多东西都是他们结合最新技术的经验之谈,远比网上大量老旧辣鸡的所谓教程靠谱多了。然而现在看着越来越多的老前辈开始对这个论坛的氛围表示失望后渐渐消失,又觉得自己水平还很初级,不知道失去了这个熟悉的论坛该去哪里学习,所以忍不住多写了些无关的废话,没啥其他情况也就没必要挣什么了,毕竟——
        问题解决了就好~~是吧。
Reply View the author
avatar
fungleo
deepin
2017-11-07 00:05
#8
https://bbs.deepin.org/post/147762
1.我还是认为你一开始查问题的时候就出了问题,没找到点子上,针对你这个问题的“针对性”解释应该是这个 ...

你看,多好,给出了解决方案。

1. 我没有再论坛提问,而是去反馈了这个BUG。但是我从论坛搜索 profile 这个关键词,没有找到任何有关的解决方案,都是在解释。所以我感觉不对。
2. 我也是一名工程师,虽然只是前端工程师而已。但是提出正确的问题我还是会的,否则我不能自己解决这个问题,尽管解决问题的方案和你们给出来的不一致。
3. 如果是使用arch或者mac系统,我不会去论坛发问。一来英文不好,属于能看不能写不能说的类型。二来,我只是个使用者,水平不高,能力有限,所以不想去多找事儿。自己能解决问题就好。但是deepin是我这几年来尝试过的用户体验最好的国人开发的Linux系统,没有之一。所以我遇到了问题,才会去反馈,才会来论坛发帖。
4. 如果我只是发问,而不是给出问题的解决方法,我也不会发帖。大家都挺忙的,我自己能解决的问题我不麻烦别人。所以本帖的主要表达内容是——如何解决不加载 ~/.bash_profile 的方法,而不是来提问。
5. 初来乍到,带有一定情绪的发帖,确实是我的不对。但是我想表达的另一个观点是,解决问题,而不是制造新的问题。尤其是新手,会很闷逼。我不算新手,但是看了生气。
6. 虽然有不尽人意之处,但是 deepin 让我感到骄傲。我相信不出几年,deepin 一定会成为主流的日常办公使用的操作系统。而我现在正在做深度的系统使用体验,准备再我们公司内部推广 deepin。
7. 无意纷争,携手努力!
Reply View the author
avatar
comzhong
deepin
2017-11-07 00:55
#9
本帖最后由 comzhong 于 2017-11-6 17:25 编辑
https://bbs.deepin.org/post/147762
你看,多好,给出了解决方案。

1. 我没有再论坛提问,而是去反馈了这个BUG。但是我从论坛搜索 profile  ...

难道你就不想知道 为什么 deepin 的图形界面启动要使用 非登录模式 ?

你改成 deepin-terminal 为 登录模式 会有什么影响?确定不会产生什么问题?
Reply View the author
avatar
fungleo
deepin
2017-11-07 01:03
#10
https://bbs.deepin.org/post/147762
难道你就不想知道 为什么 deepin 的图形界面启动要使用 非登录模式 ?

你改成 登录模式 会有什么影响? ...

我只是修改了一个配置,就实现了自动加载了。并没有调整登录模式呀。
另外,你这把我勾的。。。你别走,你好好解释一下为什么。。。。
Reply View the author
avatar
comzhong
deepin
2017-11-07 02:39
#11
https://bbs.deepin.org/post/147762
我只是修改了一个配置,就实现了自动加载了。并没有调整登录模式呀。
另外,你这把我勾的。。。你别走, ...

前面说错了,你把 deepin-termina l改成:run_as_login_shell=true ,是把 deepin-terminal 改成 登录模式了。

1.Debian默认的shell是Bash,
    1.1 命令行 和 ssh 登录 ,首先读入 /etc/profile,这是对所有用户都有效的配置;然后依次寻找下面三个文件,这是针对当前用户的配置。
  ~/.bash_profile
  ~/.bash_login
  ~/.profile
需要注意的是,这三个文件只要有一个存在,就不再读入后面的文件了。比如,要是 ~/.bash_profile 存在,就不会再读入后面两个文件了。

     1.2 图形界面登录:只加载 /etc/prfile 和 ~/.profile。也就是说,~/.bash_profile 不管有没有,都不会运行。

2.用户进入操作系统图形界面以后,常常会再手动开启一个shell。这个shell就叫做 non-login shell,意思是它不同于登录时出现的那个shell,不读取/etc/profile和.profile等配置文件。

3.终端模拟器通常会有选项来指定是开 login shell 还是 non-login shell,比如 xfce4-terminal 的(你改的那个也是)。

终上所述:
1. 图形界面登录是 non-login 不运行 .bash_profile 。
2. shell 和 ssh 登录打开 login shell ,会运行 .bash_profile。
3. 图形界面登录,可以指定 终端模拟器 为 non-login 还是 login ,但这只是指定 终端模拟器 ,经我实测,和写到  .bashrc 效果一样,每次打开终端都会执行一次。
4. 要只在图形界面登录时执行一次,应该写入 .profile,而不是 .bash_profile ,或者在 .profile 增加一条 调用 .bash_profile。

参考:
Linux 的启动流程 Linux 的启动流程
我的桌面环境是non-login 环境吗?
login shell与non-login shell的区别
Reply View the author
avatar
fungleo
deepin
2017-11-07 02:50
#12
https://bbs.deepin.org/post/147762
前面说错了,你把 deepin-termina l改成:run_as_login_shell=true ,是把 deepin-terminal 改成 登录模 ...

嗯,非常感谢你详细的回复,让我受益良多。

我要执行 ~/.bash_profile 的最重要的原因是,我同时使用多个系统,我希望我的配置是尽量一致的,而不是每个系统都需要重新搞一遍。

另外,你没回答你的问题,设置成登录模式后,有什么问题?是影响系统稳定性吗?还是会有其他后遗症?
Reply View the author
avatar
comzhong
deepin
2017-11-07 02:57
#13
https://bbs.deepin.org/post/147762
嗯,非常感谢你详细的回复,让我受益良多。

我要执行 ~/.bash_profile 的最重要的原因是,我同时使用多 ...

       我不是写了吗,你只是把终端模拟器从 non-login shell 改成 login shell,图形界面还是 non-login,没变。

       区别就是 你打开的终端 non-login shell 和 login shell 加载的环境变量不同,至于影响,得看你执行的命令或程序是不是正好受到 两种模式 不同的环境变量 的影响。
Reply View the author