解决在Shell切换用户后无法使用后退、上下左右键问题

    在Linux中为了安全,会将不同的程序运行在不同的用户下,当需要使用某些权限时,需要通过su来切换用户执行。为了省去su的步骤,我们往往会建一个同名的shell脚本,在其中通过su user -c "commond"的方式来执行程序。例如,在cdh版的hive中为了对文件有权限,需要su hdfs上(当然,你也可以改变hdfs上文件夹权限), 当打开hive后,往往按退格键会出现^H,这个可以在启动hive前,先通过stty erase ^H命令来消除退格的显示;按上下左右键会出现^[[A、^[[B、^[[C、^[[D,经过查资料,了解到这个跟readline library有关,可以安装一个readline包装器rlwrap来解决:

yum -y search readline rlwarp

    没有yum源的,可以下载rpm包安装,不做赘述。 

    然后在启动hive前,可以下执行stty erase ^H来消除退格键的显示,再通过rlwrap hive的方式来对hive命令行进行包装。该解决方案也适用于其他命令行工具,如Oracle的Sqlplus等。

以下是我包装的hive

#!/bin/bash
export HADOOP_HOME=${HADOOP_HOME:-/data/opt/hadoop}
export HIVE_HOME=/data/opt/hive

user=`whoami`
if [[ "$user" == "hdfs" ]];then
    exec $HIVE_HOME/bin/hive "$@"
else
    su hdfs -c "stty erase ^H;rlwrap $HIVE_HOME/bin/hive \"$*\""
fi

     将这个hive文件放到用户的环境变量下,在root或者其他具有su hdfs权限用户下,就可以直接通过hive正常访问HDFS和使用退格、上下左右键了。

猜你喜欢

转载自vase.iteye.com/blog/2090599