12.3 使用新版本的Bash Shell

虽然最新版的bash已经安装到系统中,但是还需要经过一些设置才能使用。首先需要将最新的bash的路径写到etcshells中,以向系统注册新Shell的路径。可以采取直接编辑etcshells文件的方式,或者采用如下更简单的方式:


  1. [root@localhost ~]# echo "usrlocal/bash4.2binbash" >> etcshells


然后使用命令chsh(change shell的简写)修改登录Shell。


  1. [root@localhost ~]# chsh

  2. Changing shell for root.

  3. New shell [binbash]: usrlocal/bash4.2binbash #

  4. 输入要修改的shell

  5. Shell changed. #

  6. 显示成功修改了shell

  7. #

  8. 此处chsh

  9. 并没有附加参数,所以默认是修改root

  10. shell

  11. ,如要改变其他用户的登录shell

  12. 可以在后面跟上用户名,使用这种方式给用户john

  13. 更改shell

  14. [root@localhost ~]# chsh john


chsh命令做的工作就是修改了etcpasswd文件中登录Shell的路径,所以如果明白了chsh的原理,实际上可以手工编辑etcpasswd文件,将root用户的这行改成下面的样子(这又一次印证了Linux中一切皆文件的说法):


  1. [root@localhost ~]# cat etcpasswd | grep bash4.2

  2. root:x:0:0:root:/root:usrlocal/bash4.2binbash


最后还需要重新登录以获得Shell,登录后再次验证一下当前的Shell版本。


  1. [root@localhost ~]# echo $BASH_VERSION

  2. 4.2.0(1)-release

  3. #

  4. 请注意,如果这时候你使用下面的命令可能会犯迷糊:为什么版本是3.2.25

  5. 呢?不是已经是4.2

  6. 了吗?

  7. [root@localhost ~]# bash --version

  8. GNU bash, version 3.2.25(1)-release (i686-redhat-linux-gnu)

  9. Copyright (C) 2005 Free Software Foundation, Inc.

  10. #

  11. 通过使用whereis bash

  12. 命令可了解当前运行的bash

  13. 命令真实运行的是binbash

  14. ,也就是说

  15. 现在是在版本为4.2

  16. bash

  17. 中运行了一个3.2.25

  18. 版本的bash

  19. 命令。如果要想每次运行bash

  20. 时候使用的是4.2

  21. 的版本,需要修改PATH

  22. 变量的值,读者可以自行完成这个任务

  23. [root@localhost ~]# whereis bash

  24. bash: binbash usrlocal/bash4.2 usrshare/man/man1/bash.1.gz