Linux Oracle下sqlplus無法使用命令退格刪除和歷史記錄的解決方法(使用rlwrap)

:近來因工作需要業餘在學習oracle,發現通過SecureCRT或putty等SSH客戶端遠程登錄Linux下oracle的sqplus時,輸錯字符後按Backspace鍵或Del鍵刪除時,會出現^H或其他亂七八糟的的字符,感覺非常彆扭不習慣,雖然可以通過Ctrl+Backspace組合鍵實現刪除功能,但是嚴重影響使用效率。google了一番,終於完美解決此問題。總結記錄如下,本文是此問題最完整的總結:

亂七八糟的字符如圖:

一、SecureCRT終端裏的解決方法:(不完美)

在SecureCRT終端裏,如果要在sqlplus下使用Backspace來刪除字符,有兩種臨時方法。

第一種是使用stty命令重新定義^H,可以在使用sqlplus之前執行stty erase ^H,也可以把這一句放到oracle用戶的.bash_profile文件裏。

stty命令簡介:
Unix或者Linux中有個stty命令,它的作用是打印或更改terminal(終端)的設置。
常用參數:
-a --all 用人類可讀表格,打印出所有現有設置
-g --save 用stty可讀表格,打印出所有現有設置
--help 幫助
--version 版本

查看當前stty現有設置,如圖:

第二種是使用SecureCRT的設置,在會話屬性的Terminal->Emulation->Mapped Keys中,選中Backspace sends delete或Delete sends backspace中的其中一個,並確保另一個不被選中。

另一個問題是bash shell下的sqlplus中使用上下箭頭無法顯示上下命令,而只是顯示^[[A,這個問題可以安裝rlwrap這個工具解決!

二、利用rlwrap工具解決方法:(完美)

1、安裝rlwrap和readline庫

CentOS下可以用EPEL的yum源直接安裝,步驟如下:

(1)RHEL/CentOS/SL Linux 6.x 下安裝 EPEL6 yum源:

32位系統選擇:
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
64位系統選擇:
# rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
導入key:
# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
默認會在/etc/yum.repos.d/下創建epel.repo和epel-testing.repo兩個配置文件。

(2)安裝rlwrap和readline:
# yum install rlwrap readline readline-devel

其他Linux發行版如果源裏沒有rlwrap和readline的(如SUSE企業版默認沒有這兩個包),要分別下載這兩個源碼包編譯安裝一下。

# wget ftp://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz
# tar zxvf readline-6.2.tar.gz
# cd readline-6.2/
# ./configure
# make
# make install


# wget http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz
# tar zxvf rlwrap-0.37.tar.gz
# cd rlwrap-0.37/
# ./configure
# make
# make install

(3)設置sqlplus的系統別名:
# vim /home/oracle/.bash_profile
在頭部或尾部添加:

alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'

退出oracle用戶再重新登錄就ok。現在sqlplus用起來就很爽很習慣了!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章