您的位置:首页 > 运维架构 > Shell

实战Linux Shell(2):布署Bash Shell 的环境

2013-10-04 16:19 435 查看
在学习shell程序设计之前,要先有一个不错的环境,方能快速入门。

以下介绍准备环境。但是我觉得现在一般装有linux的,都自带了bash,而且版本也不低的吧。


这一节,那就只作科普吧,大家了解了解,什么升级新版本的bash,或者换个csh,tcsh......,可能有用吧。由于我装的ubuntu自带的bash版本是"4.2.25(1)-release",我写这博客时,至少是最新的。所以就按书上下一个 bash-3.2.tar.gz 来示范下。大家可以去http://ftp.gnu.org/gnu/bash/
下载一个试试。


操作过程如下:

在bash-3.2.tar.gz的目录下执行的


tar  -xvzf  bash-3.2.tar.gz
cd  bash-3.2.tar.gz


设定:

请执行configure,他会默认把bash安装到 /usr/local/ 目录中
./configure

也可以用参数选项--prefix 指定要安装的路径,例如安装到hill的Desktop目录下bash3.2x文件夹下,自己建一个,可执行:

./configure --prefix=/home/hill/Desktop/bash3.2x


编译:

make


测试:

make tests


在make tests等的时间有点长,不要以为出错了

先执行看看:


./bash 
echo $BASH_VERSION






是不是一样呢?

接着离开新编译的bash ,执行


exit
echo $BASH_VERSION





看到你现在bash的版本,就表示离开了,再执行exit,你就退出bash(终端关闭)。



安装:

如果以上都没问题,就可以安装了

bash(终端)在bash-3.2文件夹下,

在安装之前,你需要执行一些命令


sudo apt-get install gettext
sed -i 's:UTF-8:KOI8-R:g' po/ru.po

不然你下面会出错,需要重新来过。下面我会大概说明下为什么,详细我也不会。O(∩_∩)O~

有兴趣的朋友可以自己先不执行上面命令,试一下。

如果你之前设定没有指定目录,那你需要成为超级用户,即root来执行以下命令
sudo make install

然后输入你的密码。
make install 默认会把bash的执行文件,安装在/usr/local/bin/中

/usr (unix software resource):与软件安装/执行有关;

/usr/local/

系统管理员在本机自行安装自己下载的软件(非distribution默认提供者),建议安装到此目录,这样会比较便于管理。举例来说,你的distribution提供的软件较旧,你想安装较新的软件但又不想移除旧版,此时你可以将新版软件安装于/usr/local/目录下,可与原先的旧版软件有分别啦!你可以自行到/usr/local去看看,该目录下也是具有bin,
etc, include, lib...的次目录喔!

若之前有利用 --prefix 指定安装到个人目录,就不必使用root权限,直接make install 即可。以我的为例

./configure --prefix=/home/hill/Desktop/bash3.2x

make install

会在/home/hill/Desktop/bash3.2x/ 中,安装bin,info,man,share等目录,bash的执行文件则放在/home/hill/Desktop/bash3.2x/bin 中

说明:

sudo apt-get install gettext
sed -i 's:UTF-8:KOI8-R:g' po/ru.po


make[2]: `en@quot.gmo' is up to date.
make[2]: `en@boldquot.gmo' is up to date.
rm -f ru.gmo && : -c --statistics -o ru.gmo ru.po
mv: cannot stat `t-ru.gmo': No such file or directory
make[2]: *** [ru.gmo] Error 1


我在google上搜索了一下,或者baidu 搜。

需要安装 sudo apt-get install gettext. 之后 make clean 。再重头开始,是重头开始哦

gettext 简而言之就是"翻译",有点太狭义了,先这么理解吧

GNU `gettext' is an important step for the GNU Translation Project, as it is an asset on which we may build many other steps.

详细的请到 http://zh.wikipedia.org/wiki/Gettexthttps://www.gnu.org/software/gettext/ 了解


ru.po:21:9: invalid multibyte sequence 
ru.po:21:10: invalid multibyte sequence 
ru.po:21:11: invalid multibyte sequence 
ru.po:21:12: invalid multibyte sequence 
ru.po:21:13: invalid multibyte sequence 
ru.po:21:14: invalid multibyte sequence 
ru.po:21:15: invalid multibyte sequence 
ru.po:21:16: invalid multibyte sequence


出现这种错误时,执行下面命令

sed -i 's:UTF-8:KOI8-R:g' po/ru.po

这一句是一个sed的替换命令,与下面操作等效

打开/home/hill/Desktop/bash-3.2/po/ru.po 文件


"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"   去掉这一行
"Content-Type: text/plain; charset=KOI8-R\n"  加上这一行
"Content-Transfer-Encoding: 8bit\n"

编码问题。

大家可以到 http://download.csdn.net/detail/hillcode/6353471 下载我编译好的文件

切换使用旧版本的Bash shell

以ubuntu12.04为例,执行命令


sudo vim /etc/shells

会看到
# /etc/shells: valid login shells
   /bin/sh
   /bin/dash
  /bin/bash
   /bin/rbash


我们需要在最后加上bash编译出来的路径,需要root才能修改,修改之前,先复制一份备用,再修改。

# /etc/shells: valid login shells
  /bin/sh
  /bin/dash
 /bin/bash
  /bin/rbash
  /home/hill/Desktop/bash-3.2x/bin/bash

之前 ./configure 没改路径的,应该是这样的

# /etc/shells: valid login shells
  /bin/sh
  /bin/dash
 /bin/bash
  /bin/rbash
  /usr/local/bin/bash

反正就是 在最后一行加上,你bash-3.2编译出来的路径。

执行命令


chsh






之后,系统log out (注销)或者重启, 在重新登入



打开终端输入


echo $BASH_VERSION

你会看到 3.2.0(1)-release






由于自带的比3.2高,所以还是换回来吧。执行

chsh

输入密码后,输入

/bin/bash

如图:





之后,系统log out (注销)或者重启, 在重新登入

这里注意:你不能把/etc/shell 最后一行改了,bash3.2x文件夹删了,再执行chsh

命令修改,这样会出错。你需要把bash改回原来的 4.2.25 后,才能修改/etc/shell和删除bash3.2x文件夹。

重新登入后,你可以把/etc/shell 最后一行去掉(需要root, sudo), 删除bash3.2x文件夹,或者你自己处理。

Linux目录配置,即(/var, /usr, /bin ......)


http://vbird.dic.ksu.edu.tw/linux_basic/0210filepermission_3.php
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: