ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【Shell】【Tips】Linux的.bash_profile和.bashrc与子Shell的关系

【Shell】【Tips】Linux的.bash_profile和.bashrc与子Shell的关系

原创 Linux操作系统 作者:secooler 时间:2009-09-02 18:15:20 0 删除 编辑
毫无疑问,.bash_profile文件是Linux默认Bash Shell的配置文件。

1.为了提高DBA维护数据库的效率,在这个文件中添加一些个性化的配置是一个非常好的习惯,举几个我常用的例子。
1)为了快速动态连续的到alert警告文件的最后200行内容,可以在.bash_profile文件中添加如下的同名,这样就可以简单的在Shell里输入“alert”得到及时的alert信息了。
alias alert='tail -200f $ORACLE_BASE/admin/$ORACLE_SID/bdump/alert_$ORACLE_SID.log'

2)为了快速使用vi编辑器编辑网络配置文件tnsnames.ora,可以在.bash_profile文件中添加如下的同名,使用方法同上。
alias tnsnames='vi $ORACLE_HOME/network/admin/tnsnames.ora'

3)使用vi编辑习惯使用曾经使用过的命令。
set -o vi

这个配置文件可以根据自己的操作习惯个性化定制,因人而异,不过宜少不宜多,在设置之后一定要进行测试,防止出现不该有的副作用,这一点我是吃过亏的。
吃亏经历在此,请勿效尤:《【故障处理】因GREP“花哨”功能导致ORA-12157错误的排查过程》http://space.itpub.net/519536/viewspace-613043

2.对于配置文件的修改是在下一次登陆时生效的,如果想要修改的配置文件立即生效,有如下几种方法(效果相同)
ora10g@Tdb /home/oracle$ source .bash_profile
ora10g@Tdb /home/oracle$ . ./.bash_profile
ora10g@Tdb /home/oracle$ . .bash_profile
ora10g@Tdb /home/oracle$ . ~/.bash_profile

3.这个.bashrc文件是做什么用的呢?
功能:在启用子Shell的时候系统读取配置文件时.bashrc这个文件,而不是.bash_profile。

关于子Shell这个概念我举一个很有趣的例子,这个例子也包含一个我遇到的在运维中操作习惯上一个小问题。

我习惯在.bash_profile文件中添加“set -o vi”一行,启用vi编辑习惯编辑并重用曾经使用过的命令。
当我在Oracle的sqlplus命令行界面里想要暂时退出sqlplus执行一个Shell命令时,我习惯使用“!”或“host”临时退出到 Shell界面,注意,这是我们进入到的不是登录sqlplus之前的Shell环境,而是一个新的子Shell环境,通过下面的操作过程您就知道确实是不同的Shell环境。

1)先使用“w”命令确定一下只有我一个人登陆在系统上
ora10g@Tdb /home/oracle$ w
 17:20:37 up 11 days, 19:16,  1 user,  load average: 0.02, 0.03, 0.00
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
oracle   pts/1    10.142.8.207     16:49    0.00s  0.20s  0.00s w

2)使用“$$”这个特殊变量得到当前的shell进程号,这时可以使用“ps”命令确认目前的bash进程信息,这两个方法得到的信息是一致的,这里都会得到当前的Shell进程号是25431
ora10g@Tdb /home/oracle$ echo $$
25431
ora10g@Tdb /home/oracle$ ps -ef | grep bash | grep -v grep
oracle   25431 25430  0 16:49 pts/1    00:00:00 -bash

3)进入到sqlplus命令行界面
ora10g@Tdb /home/oracle$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.3.0 - Production on Wed Sep 2 17:18:53 2009

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

sys@ora10g>

4)在sqlplus里使用“!”或“host”临时进入到Shell界面,再查看一下这时的Shell进程号信息,可以得到不同于上面25431的shell进程号26646
sys@ora10g> !
ora10g@Tdb /home/oracle$ echo $$
26646

5)因为只有我一个人登陆到这系统中,所以可以通过下面的方法同时得到两个shell的进程信息,一个是25431,另外一个是26646
ora10g@Tdb /home/oracle$ ps -ef | grep bash | grep -v grep
oracle   25431 25430  0 16:49 pts/1    00:00:00 -bash
oracle   26646 26643  0 17:18 pts/1    00:00:00 /bin/bash

其实关于模拟子Shell还有一个更简单的方法,就是在Shell界面里直接键入“sh”,就会启用一个全新的子Shell。我这里举得是一个和Oracle数据库有关的一个真实例子,因人而异吧。

关于子Shell的概念就谈这些,下面我以遇到的一个操作习惯类的小问题为例,谈一下子Shell不会继承.bash_profile配置文件的事实。


4.【解决一个小问题】
我遇到的小问题是:在进入到sqlplus之前我可以使用vi编辑习惯(按Esc然后使用k,j,h,l等键来操作历史命令)来检索和修改曾经使用过的命令,然而在我以“!”或“host”方式退出到Shell界面后这种习惯不复存在了,不爽哉。原因就在于当进入到子shell后,系统会自动重新读取.bashrc配置文件,而不是我们曾经添加了“set -o vi”的.bash_profile配置文件,因为.bashrc文件不曾设置过这个操作习惯,所以无法使用这个功能。

到此,解决这个小问题的方法就很简单了:

方法一:如果想要临时解决,当然就是在子Shell中直接键入“set -o vi”启用vi编辑习惯,如果再进入另外一个子Shell,还得重新进行设置
方法二:在.bashrc文件中添加一行“set -o vi”,使之在每次进入到子Shell后都永久生效

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-613812/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE 总监,阿里云MVP,北京大学理学硕士,恩墨学院创始人,教育专家,中国区 Cloudera 首位官方授权大数据讲师,金牌培训专家,BDA大数据联盟创始人,OCM联盟创始人,ACCUG创始人、ACOUG核心专家,Blogger。

注册时间:2008-03-16

  • 博文量
    797
  • 访问量
    7974257