解决在Shell切换用户后无法使用后退、上下左右键问题
程序员文章站
2022-06-04 15:50:50
...
在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和使用退格、上下左右键了。
上一篇: mysql省市区脚本
下一篇: Activity实现下拉刷新