Linux-profile、bashrc、bash_profile之间的区别和联系

来源:互联网 发布:js 日期转字符串 编辑:程序博客网 时间:2024/06/18 03:02

为使Bash更好地为我们服务,我们需定制bash shell环境。

~/.bash_profile、~/.bashrc、和~/.bash_logout

  1. 上面这三个文件是bash shell的用户环境配置文件,位于用户的主目录下。其中.bash_profile是最重要的一个配置文件,它在用户每次登录系统时被读取,里面的所有命令都会被bash执行。.profile(由Bourne Shell和Korn Shell使用)和.login(由C Shell使用)两个文件是.bash_profile的同义词,目的是为了兼容其它Shell。在Debian中使用.profile文件代 替.bash_profile文件。

  2. .bashrc文件会在bash shell调用另一个bash shell时读取,也就是在shell中再键入bash命令启动一个新shell时就会去读该文件。这样可有效分离登录和子shell所需的环境。但一般 来说都会在.bash_profile里调用.bashrc脚本以便统一配置用户环境。

  3. .bash_logout在退出shell时被读取。所以我们可把一些清理工作的命令放到这文件中。

在 /etc目录的bashrc和profile是系统级(全局)的配置文件,当在用户主目录下找不到.bash_profile 和.bashrc时,就会读取这两个文件。.bash_history是bash shell的历史记录文件,里面记录了你在bash shell中输入的所有命令。可通过HISSIZE环境变量设置在历史记录文件里保存记录的条数。alias l = 'ls -l'是设置别名的语句,把它放在这些配置文档中就可使我们能用简单的'l'命令,代替'ls -l'命令。

当我们修改了这些配置件后,可用source .bash_profile命令使它修改内容马上生效

运行中的Bash有两种属性(状态/模式),一种,是否interactive shell(交互式Shell),另一种,是否login shell(登录Shell),然后,运行中的Shell排列组合有这么几种:

  登录交互式Shell非登录交互式Shell登录非交互式Shell非登录非交互式Shell

交互式Shell:没有非选项参数,没有-c,标准输入和标准输出与终端相连的,或者用-i参数启动的Bash实例。可以通过探测PS1变量是否设置或者$-返回值中是否包含字幕i来判定。什么是没有非选项参数?比如bash ~/myscript/clear_temp_files.sh这样执行的Shell脚本的Bash实例,就不是交互式Shell,因为脚本的路径,就是非选项参数。-c又是干什么的?就是使用一个字符串作为Bash的传入参数,比如bash -c ‘ls -ahl’,这种Shell进程也不算是交互式Shell。

登录Shell第0个参数以-号开头的Bash实例,或者用-login参数启动的Bash Shell。更加诡异了,什么叫第0个参数以-号开头?你只要随便登录一个*nix系统,Mac也行,Linux也行,然后echo $0,你就明白了,惊讶吧,出来的值竟然是-bash。真的是以-号开头的!! 

登录Shell(不管是不是交互式的)文件加载顺序如下:

/etc/profile~/.bash_profile~/.bash_login~/.profile

交互式非登录Shell文件加载顺序如下:

/etc/bashrc~/.bashrc

一个crontab脚本,没经过处理的话,既不是交互式Shell,也不是登录Shell,所以上面的都不会执行。怎么处理?比如可以把shabang改一下#!/bin/bash -l让脚本用登录Shell来解释执行,就可以加载/etc/profile或者,调用Bash解释器,加-l参数也可以。

另一个遇到的问题,为什么在Linux,我们总是配置~/.bashrc但是在Mac下,我们配置就没有用呢,要去配置~/.bash_profile才行?哈!什么情况加载~/.bashrc,上面说得很清楚了,交互式非登录Shell,那在Mac下,你打开Term,echo一下$0,看看,前面是不是有个-号?说明这是交互式的登录Shell,当然不会加载~/.bashrc了。实属正常。你肯定要问了,为啥Linux下没问题呢?你打开~/.profile看看就知道了,这货竟然在~/.profile文件里面source了~/.bashrc!

bash shell中的选项可控制shell的行为和功能,我们可以通过shopt命令来设置。使用set命令也可以,但它已被shopt替代,但为了向下兼容,set命令还是可以使用的。使用不带参数的shopt命令可以列出当前shell中只能由shopt设置的选项,用shopt -o可列出可由set命令设置的选项。

下面是一些可由set命令基本的选项,默认是关闭的。

emacs                  进入emacs编辑模式vi                     进入vi编辑模式ignoreeof              不允许单独使用Ctrl_D退出的用法,要使用exit。与IGNOREEOF=10等价noclobber              不允许重定向覆盖已存在文件noglob                 不允许扩展文件名通配符nounset                使用未定义的变量时给出错误

下面是一些只能由shopt命令设置的选项。

cdspell          自动改正cd命令参数中的小错误hostcomplete     以@开头时,按tab键可进行主机名的自动完成dotgblob         以点开始的文件名被包含在路径名扩展中mailwarn         显示邮件警告信息

shopt命令的选项如下:

-p          显示可设置选项及当前取值-s          设置每一选项为on-u          设置每一选项为off-q          不输出信息-o          
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 青椒炒什么 怎么炒青椒 青椒和什么炒好吃 怎么炒青椒好吃 菜怎么炒好吃 炒蔬菜大全 炝炒空心菜 芹菜炒火腿 肉炒小白菜 炒空心菜梗 炒空心菜的做法 芹菜炒猪腰 芹菜炒香菇 如何炒空心菜 炝炒小白菜 芹菜炒土豆 怎么炒空心菜 鸡肾炒芹菜 小白菜炒木耳 芹菜炒土豆片 香菇炒芹菜 芹菜和什么炒 如何炒芹菜 炒芹菜放醋吗 芹菜炒猪耳朵 芹菜炒土豆条 怎样炒芹菜 虾皮炒小白菜 木耳炒芹菜 洋葱炒羊肉的做法 芹菜如何炒 韭菜炒虾皮 芹菜可以炒鸡肉吗 小青菜炒蘑菇 土豆炒芹菜 芹菜炒猪肚 空心菜梗炒酸 芹菜炒蘑菇 芹菜炒里脊肉 芹菜炒土豆丝的做法 芹菜没炒熟能吃吗