有一个练习:提示符修改过后永久保存,每次打开一个新的shell,提示符都为已设定好的格式,不会因为打开新的shell而不同。
在做这个练习的时候遇到了不少问题,通过不断bing,将起初很陌生的问题一点点的解决,得到了一些理解,因此将理解写下来。
提示符与变量PS1有关,PS1的值可以被修改或重新赋予。PS1的值变,则提示符也会变。通过搜索得到只要在/etc/bashrc中添加一句PS1=XXXXX就可以解决这个问题,其中XXXXX是一串符合PS1格式的值。可为什么在bashrc中添加一句话就将问题解决了?
要想PS1的值产生作用,那肯定是在打开shell时,系统已经执行过某些文件,然后执行过PS1重新赋值的那条语句。在这要先说下什么是shell,它有几种,这几种的区别。
shell是什么?比较专业抽象的解释我就不说了,我直接举些实例。当你打开电脑,来到linux的图形化桌面的时候,其实你已经接触到一个shell,这个图形化的操作环境就是一个shell。然后在桌面右键,进入一个终端,而这个终端也是一个shell。然后,shell有两种:login shell和non-login shell。login shell是需要用户名、密码登录后才能进入的shell(或者通过”–login”选项生成的shell);而non-login shell则是不需要密码和账号的。从执行文件的顺序的角度来讲这两者的区别:
在进入login shell时,系统自动执行的文件及顺序:/etc/profile >
/etc/profile.d > ~/.bash_profile > ~/.bashrc > /etc/bashrc。
在进入non-login shell时,系统自动执行的文件及顺序:~/.bashrc > /etc/bashrc
> /etc/profile.d。
因此到这里,可以解释为什么要在/etc/bashrc下给PS1赋值。无论是以什么方式打开shell,都必然要执行/etc/bashrc,那么就会执行PS1重新赋值的语句,也就会得到想要的提示符。
那/etc/bashrc和~/.bashrc有什么区别? “~”表示的是家目录,比如root用户,他的家目录为/root,那么“~”就等于/root。隐藏文件一般带有“.”。不同的用户有不同的家目录,就有不同的.bashrc。那么系统根据不同的登录用户就会执行不同的.bashrc,给予用户对应的使用习惯。而/etc下的文件设置的内容是全部用户都相同的。因此如果是在/etc/bashrc对PS1赋值,就会对全部登录这个系统的用户有效;如果是在~/.bashrc下对PS1赋值,就会只和对应的用户有效,而这用户的提示符就会和别的用户不同。
/etc/profile和/etc/bashrc有什么区别,它们一般有什么作用?profile是某个用户唯一的用来设置环境变量的地方,因为用户可以有多个 shell 比如 bash, sh, zsh 之类的,但像环境变量这种其实只需要在统一的一个地方初始化就可以了,而这就是 profile。bashrc是专门用来给 bash 做初始化的,比如用来初始化 bash 的设置,bash 的代码补全,bash 的别名,bash 的颜色。以此类推也就还会有 shrc, zshrc 这样的文件存在。
原创文章,作者:Eminem,如若转载,请注明出处:http://www.178linux.com/81012