AIX系统ksh到bash互切

来源:互联网 发布:r2r梯形网络 编辑:程序博客网 时间:2024/04/29 05:09

以下切换ksh到bash在攀商行yypt(银银合作)平台测试:

1. 

#echo $SHELL

/bin/ksh

#which bash

/usr/bin/bash

#cd /usr/bin

#bash //  执行后提示错误

不能切换到bash,错误提示貌似是找不到libintl.so.8,查看/opt/freeware/lib/下有libintl.a,而没有libintl.so.8

2.

下载bash-3.2-1.aix5.2.ppc.rpm,通过FTP上传到到/opt/freeware/packages/

#cd/opt/freeware/packages/

#rpm -ivh bash-4.2-3.aix5.3.ppc.rpm

file /opt/freeware/bin/bash from install of bash-4.2-3 conflicts with file from package bash-3.0-1file /bin/bash from install of bash-4.2-3 conflicts with file from package bash-3.0-1file /opt/freeware/bin/bashbug from install of bash-4.2-3 conflicts with file from package bash-3.0-

......(省略)

......(省略)

#rpm -Uvh --oldpackage bash-4.2-3.aix5.3.ppc.rpm // 网上说这里是在升级老包

#cd /usr/bin

#bash// 无提示表明切换成功


3.

在修改之前,需要先更改系统安全设置,在可用shell 列表中加上 bash 。编辑 /etc/security/login.cfg ,在 shell 列表在usw后面添加,/bin/bash(安装bash-4.2-3.aix5.3.ppc.rpm后,应该会在/bin下面生成bash

#vi /etc/security/login.cfg

usw:
        shells = /bin/sh,/bin/bsh,/bin/csh,/bin/ksh,/bin/tsh,/bin/ksh93,/usr/bin/sh,/usr/bin/bsh,/usr/bin/csh,/usr/bin/ksh,/usr/bin/tsh,/usr/
bin/ksh93,/usr/bin/rksh,/usr/bin/rksh93,/usr/sbin/uucp/uucico,/usr/sbin/sliplogin,/usr/sbin/snappd,/bin/bash
        maxlogins = 32767
        logintimeout = 60
        auth_type = STD_AUTH

保存并退出


4.

usermod –s /usr/bin/bash  username

#usermod -s /bin/bash yypt // 指定yypt用户使用/bin/bash

修改shell 后重新登录系统,默认 shell 就改变为bash了。


5.

问题:值的注意的是,在之前登录shell默认为ksh时,系统读取了.profile文件,也貌似读取了.kshrc文件(里面设置了很多银银平台需要的环境变量),但切换到bash登录shell后,读取了.profile,貌似没有读取.kshrc文件,于是打开.profile,找到一下部分:

if [ -f $HOME/.kshrc -a -r $HOME/.kshrc ]; then
    ENV=$HOME/.kshrc                # set ENV if there is an rc file
    export ENV
fi

在这里貌似没有执行.kshrc,于是添加语句如下:

if [ -f $HOME/.kshrc -a -r $HOME/.kshrc ]; then
    ENV=$HOME/.kshrc                # set ENV if there is an rc file

    source $HOME/.kshrc            # add by ycc
    export ENV
fi

保存退出。


6.

#vi .kshrc

修改!#/bin/ksh为!#/bin/bash


保存退出,重新登录shell,发现已经添加上程序需要的环境变量。但比较之前ksh环境下和现在bash环境下环境变量,差异如下:

bash:
_=/usr/bin/printenv
SHLVL=1
OLDPWD=/home/yypt/tmp


ksh:
_=/usr/bin/env
A__z=! LOGNAME


通过查找资料,暂时发现此差异对程序执行并无影响。

想要切换到ksh,只要按照此方法设置为ksh即可。

0 0
原创粉丝点击