`
vase
  • 浏览: 421226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解决在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和使用退格、上下左右键了。

 

分享到:
评论

相关推荐

    解决securecrt中sql语句上下键显示

    在使用SecureCRT进行远程连接到数据库时,特别是通过SQL*Plus工具执行SQL语句时,我们可能会遇到一个问题:使用上下箭头键来翻阅之前输入过的SQL命令时,SecureCRT无法正常显示这些历史记录。这种情况在Windows系统...

    Sqlplus下解决回车键和上下键历史信息问题

    在使用Oracle的命令行工具Sqlplus时,用户可能会遇到一个常见问题:无法使用回车键确认输入或通过上下箭头键访问命令历史记录。这不仅降低了工作效率,还可能在频繁切换窗口查询历史命令时带来不便。为了解决这个...

    shell编程用户信息管理(模拟)课程设计说明书

    7. 文本内容分析:在 shell 脚本中,文本内容分析可以用于分析和处理文本数据,例如,在 menu 脚本中,可以使用 grep 命令来查找和显示特定用户信息。 8. Linux 重要命令:在 shell 脚本中,Linux 重要命令可以用于...

    Shell脚本中实现切换用户并执行命令操作

    在Shell脚本中使用`su`命令时,我们可以通过以下两种方式切换用户并执行命令: 1. 使用Here Document(这里文档): ```bash su - test # 在这里写需要执行的命令 pwd; exit; EOF ``` 在这个例子中,`定义了一...

    windows adb shell tab键补全

    虽然在默认情况下,直接在`adb shell`中使用`tab`键可能不会立即工作,但可以通过以下步骤在CMD中启用`adb shell`的`tab`补全: - 首先,确保你的adb版本支持这个功能。较新的adb版本通常支持此特性。 - 在CMD中...

    B shell与 C shell的区别

    1. 命令历史记录:C shell提供了命令历史记录的功能,用户可以通过按上下箭头键来回顾之前输入的命令,而B shell不具备这个功能。 2. 文件名补全:C shell提供了文件名补全的功能,用户可以通过按Tab键来补全文件名...

    shell编程--用户信息管理(模拟).doc

    * 在 shell 脚本中,可以使用 read 语句来实现与用户的交互,例如 `read choice`。 * 使用 echo 语句可以向用户输出信息,例如 `echo -n "警告 【$dataSource】 不存在!请确认!"`。 知识点五:文件读写 * 在 ...

    在linux shell脚本中root切换到普通用户执行脚本或命令的方法

    值得注意的是,使用`su`命令切换用户时,通常需要输入目标用户的密码,但在脚本环境中,这可能会导致交互式问题。为避免这种情况,可以在系统中设置无密码切换用户,比如通过编辑`/etc/sudoers`文件,添加一条允许...

    解决Unity不能调用shell脚本传递参数的问题

    ### 解决Unity不能调用shell脚本传递参数的问题 在Unity开发过程中,有时我们需要与操作系统进行交互,例如执行shell脚本来处理一些特定的任务。但在实际操作中,可能会遇到Unity无法正确调用shell脚本并传递参数的...

    SylixOS shell用户手册_SylixOSshell用户手册_翼辉操作系统_

    《SylixOS Shell用户手册》是翼辉操作系统的重要组成部分,主要涵盖了如何使用SylixOS操作系统中的Shell进行系统管理和任务执行的详细指南。Shell是操作系统提供的一种命令行接口,让用户能够通过文本指令与操作系统...

    普通用户不能su切换到其它用户提示killed,或者无法登录系统

    通过以上步骤,可以逐步排查并解决用户无法切换或登录的问题。在修复过程中,保持谨慎,确保每次更改都测试用户登录和切换功能,以免引入新的问题。如果问题仍然存在,可能需要进一步的系统调试或求助于专业的系统...

    解决Linux内核移植后退格键失效的问题

    在 Linux 移植过程中,经常会遇到退格键失效的问题,这使得用户在输入命令时无法使用退格键删除错误的输入字符。本文将详细阐述如何解决这个问题。 问题现象:在 minicom 终端下,用户可以输入许多命令,查看各个...

    用expect 实现切换用户时自动输入密码.txt

    ### 使用Expect实现自动切换用户及执行命令 #### 一、Expect简介 `Expect`是一种用于自动化交互式命令的工具,它能模拟用户与基于文本的交互式程序进行对话。通过编写脚本来控制这些对话,我们可以实现一系列自动...

    更改linux用户登录shell的方法

    在Linux系统中,用户登录时使用的Shell是通过/etc/passwd文件来确定的。要查看系统中安装了哪些Shell类型,可以使用以下方法: a. 使用命令`chsh -l`列出已安装的Shell。 b. 直接查看`/etc/shells`文件的内容,该...

    解决Windows下PHP的exec、shell_exec等函数不能正常运行的方法

    此外,还有其他替代方案来解决这个问题,比如使用`popen`函数,或者在服务器配置中开启FastCGI模式并调整其配置以允许执行命令。不过,这些方法可能需要更深入的服务器配置知识,对初学者来说可能较为复杂。 总之,...

    CDH+切换用户失败+解决方案

    通过本文的介绍,我们可以了解到在CDH环境中遇到切换用户失败问题的原因及其解决方法。关键在于理解`/sbin/nologin`的意义以及如何通过修改`/etc/passwd`文件来解决问题。同时,我们也扩展学习了CDH、HDFS以及...

    linux-在shell脚本中使用加密密码的轻量级解决方案

    在shell脚本中使用加密密码的轻量级解决方案

    Shell转换成C

    转换后的C代码仍然是可读的,只是对普通用户而言,阅读和理解C代码比直接阅读Shell脚本更为困难。此外,转换过程并不改变脚本的逻辑,因此,如果脚本中存在安全漏洞,转换后仍然存在。 在实际应用中,`shc`常用于...

    Linux通过Shell脚本命令修改密码的两种方式

    交互方式修改密码 1. ssh 远程到主机; 2. 切换到root账号; [一般都是切换到root进行密码修改,如果普通用户修改自己的密码,要输入原密码,... 3. passwd username ... ...echo password | passwd testuser --stdin > /dev

Global site tag (gtag.js) - Google Analytics