安装rlwrap 

需要先安装readline,否则会报一下错误:You need the GNU readline library(ftp://ftp.gnu.org/gnu/readline/ ) to build this program! 如下:

[root@rtest ~]# cd /opt/ [root@rtest opt]# ll total 256 drwxr-xr-x 3 root root 4096 Apr 22 09:54 ORCLfmap -rw-r--r-- 1 root root 251438 May 6 10:12 rlwrap-0.37.tar.gz [root@rtest opt]# tar -zxvf rlwrap-0.37.tar.gz [root@rtest opt]# cd rlwrap-0.37 [root@rtest rlwrap-0.37]# ll total 408 -rw-rw-r-- 1 oracle dba 35029 Apr 30 2010 aclocal.m4 -rw-r--r-- 1 oracle dba 638 Aug 15 2006 AUTHORS -rw-r--r-- 1 oracle dba 4267 May 5 2010 BUGS -rw-r--r-- 1 oracle dba 105 Aug 10 2003 ChangeLog drwxrwxr-x 2 oracle dba 4096 May 5 2010 completions -rw-rw-r-- 1 oracle dba 7042 Apr 30 2010 config.h.in -rwxr-xr-x 1 oracle dba 222847 Apr 30 2010 configure -rw-r--r-- 1 oracle dba 11521 Apr 30 2010 configure.ac -rw-r--r-- 1 oracle dba 17992 Aug 8 2006 COPYING drwxrwxr-x 2 oracle dba 4096 May 5 2010 doc drwxrwxr-x 2 oracle dba 4096 May 5 2010 filters -rw-r--r-- 1 oracle dba 2019 Nov 23 2009 INSTALL -rw-r--r-- 1 oracle dba 1272 Jan 23 2010 Makefile.am -rw-rw-r-- 1 oracle dba 28316 Apr 30 2010 Makefile.in -rw-r--r-- 1 oracle dba 16788 Apr 30 2010 NEWS -rw-r--r-- 1 oracle dba 1394 Oct 24 2007 PLEA -rw-r--r-- 1 oracle dba 3070 Jan 8 2010 README drwxrwxr-x 2 oracle dba 4096 May 5 2010 src drwxrwxr-x 2 oracle dba 4096 May 5 2010 test -rw-r--r-- 1 oracle dba 310 Apr 16 2010 TODO drwxrwxr-x 2 oracle dba 4096 May 5 2010 tools [root@rtest rlwrap-0.37]# [root@rtest rlwrap-0.37]# ./configure checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make sets $(MAKE)... (cached) yes checking whether build environment is sane... yes checking for style of include used by make... GNU checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking dependency style of gcc... gcc3 checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking dependency style of gcc... (cached) gcc3 checking how to run the C preprocessor... gcc -E checking for perl... /usr/bin/perl checking for strip... strip checking for ANSI C header files... (cached) yes checking for sys/wait.h that is POSIX.1 compatible... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking libutil.h usability... no checking libutil.h presence... no checking for libutil.h... no checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking sched.h usability... yes checking sched.h presence... yes checking for sched.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking for sys/wait.h... (cached) yes checking sys/resource.h usability... yes checking sys/resource.h presence... yes checking for sys/resource.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking for unistd.h... (cached) yes checking for stdint.h... (cached) yes checking time.h usability... yes checking time.h presence... yes checking for time.h... yes checking getopt.h usability... yes checking getopt.h presence... yes checking for getopt.h... yes checking regex.h usability... yes checking regex.h presence... yes checking for regex.h... yes checking curses.h usability... no checking curses.h presence... no checking for curses.h... no checking termcap.h usability... no checking termcap.h presence... no checking for termcap.h... no checking for term.h... no checking for ncurses/term.h... no checking argument type of tputs putc function... char checking whether your getopt() correctly understands double colons in option string... yes checking for an ANSI C-conforming const... yes checking for pid_t... yes checking whether time.h and sys/time.h may both be included... yes checking whether gcc needs -traditional... no checking return type of signal handlers... void checking for getopt_long... yes checking for getopt_long... (cached) yes checking for isastream... yes checking for mkstemp... yes checking for pselect... yes checking for putenv... yes checking for readlink... yes checking for sched_yield... yes checking for setenv... yes checking for setitimer... yes checking for setsid... yes checking for setrlimit... yes checking for sigaction... yes checking for snprintf... yes checking for strlcpy... no checking for strlcat... no checking for strnlen... yes checking for system... yes checking for openpty in -lutil... yes checking for openpty... yes checking for getpty... no checking for grantpt... yes checking for unlockpt... yes checking for getpt... yes checking for pty/tty type... checking pty.h usability... yes checking pty.h presence... yes checking for pty.h... yes OPENPTY configure: checking for pty ranges... checking for tgetent... no checking for tgetent in -lcurses... no checking for tgetent in -lncurses... no checking for tgetent in -ltermcap... no configure: WARNING: No termcap nor curses library found checking for readline in -lreadline... no configure: error:

You need the GNU readline library(ftp://ftp.gnu.org/gnu/readline/ ) to build this program!


[root@rtest rlwrap-0.37]#

############################################################################################################## 1.安装readline

[root@rtest ~]# mount /dev/cdrom /media/ mount: block device /dev/cdrom is write-protected, mounting read-only [root@rtest ~]# cd /media/Server/ [root@rtest Server]# rpm -Uvh readline- readline-5.1-3.el5.i386.rpm readline-devel-5.1-3.el5.i386.rpm [root@rtest Server]# rpm -Uvh readline-5.1-3.el5.i386.rpm warning: readline-5.1-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] package readline-5.1-3.el5.i386 is already installed [root@rtest Server]# rpm -Uvh readline-devel-5.1-3.el5.i386.rpm warning: readline-devel-5.1-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 error: Failed dependencies: libtermcap-devel is needed by readline-devel-5.1-3.el5.i386 [root@rtest Server]# rpm -Uvh libtermcap-devel-2.0.8-46.1.i386.rpm warning: libtermcap-devel-2.0.8-46.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:libtermcap-devel ########################################### [100%] [root@rtest Server]# rpm -Uvh readline-devel-5.1-3.el5.i386.rpm warning: readline-devel-5.1-3.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 1e5e0159 Preparing... ########################################### [100%] 1:readline-devel ########################################### [100%]

2.安装rlwrap
[root@rtest Server]# cd /opt/rlwrap-0.37 [root@rtest rlwrap-0.37]# ll total 480 -rw-rw-r-- 1 oracle dba 35029 Apr 30 2010 aclocal.m4 -rw-r--r-- 1 oracle dba 638 Aug 15 2006 AUTHORS -rw-r--r-- 1 oracle dba 4267 May 5 2010 BUGS -rw-r--r-- 1 oracle dba 105 Aug 10 2003 ChangeLog drwxrwxr-x 2 oracle dba 4096 May 5 2010 completions -rw-rw-r-- 1 oracle dba 7042 Apr 30 2010 config.h.in -rw-r--r-- 1 root root 67255 May 6 10:16 config.log -rwxr-xr-x 1 oracle dba 222847 Apr 30 2010 configure -rw-r--r-- 1 oracle dba 11521 Apr 30 2010 configure.ac -rw-r--r-- 1 oracle dba 17992 Aug 8 2006 COPYING drwxrwxr-x 2 oracle dba 4096 May 5 2010 doc drwxrwxr-x 2 oracle dba 4096 May 5 2010 filters -rw-r--r-- 1 oracle dba 2019 Nov 23 2009 INSTALL -rw-r--r-- 1 oracle dba 1272 Jan 23 2010 Makefile.am -rw-rw-r-- 1 oracle dba 28316 Apr 30 2010 Makefile.in -rw-r--r-- 1 oracle dba 16788 Apr 30 2010 NEWS -rw-r--r-- 1 oracle dba 1394 Oct 24 2007 PLEA -rw-r--r-- 1 oracle dba 3070 Jan 8 2010 README drwxrwxr-x 2 oracle dba 4096 May 5 2010 src drwxrwxr-x 2 oracle dba 4096 May 5 2010 test -rw-r--r-- 1 oracle dba 310 Apr 16 2010 TODO drwxrwxr-x 2 oracle dba 4096 May 5 2010 tools

[root@rtest rlwrap-0.37]# ./configure checking build system type... i686-pc-linux-gnu checking host system type... i686-pc-linux-gnu checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... gawk checking whether make sets $(MAKE)... yes checking whether make sets $(MAKE)... (cached) yes checking whether build environment is sane... yes checking for style of include used by make... GNU checking for gcc... gcc checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking dependency style of gcc... gcc3 checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking dependency style of gcc... (cached) gcc3 checking how to run the C preprocessor... gcc -E checking for perl... /usr/bin/perl checking for strip... strip checking for ANSI C header files... (cached) yes checking for sys/wait.h that is POSIX.1 compatible... yes checking errno.h usability... yes checking errno.h presence... yes checking for errno.h... yes checking fcntl.h usability... yes checking fcntl.h presence... yes checking for fcntl.h... yes checking libutil.h usability... no checking libutil.h presence... no checking for libutil.h... no checking for stdlib.h... (cached) yes checking for string.h... (cached) yes checking sched.h usability... yes checking sched.h presence... yes checking for sched.h... yes checking sys/ioctl.h usability... yes checking sys/ioctl.h presence... yes checking for sys/ioctl.h... yes checking for sys/wait.h... (cached) yes checking sys/resource.h usability... yes checking sys/resource.h presence... yes checking for sys/resource.h... yes checking stddef.h usability... yes checking stddef.h presence... yes checking for stddef.h... yes checking termios.h usability... yes checking termios.h presence... yes checking for termios.h... yes checking for unistd.h... (cached) yes checking for stdint.h... (cached) yes checking time.h usability... yes checking time.h presence... yes checking for time.h... yes checking getopt.h usability... yes checking getopt.h presence... yes checking for getopt.h... yes checking regex.h usability... yes checking regex.h presence... yes checking for regex.h... yes checking curses.h usability... no checking curses.h presence... no checking for curses.h... no checking termcap.h usability... yes checking termcap.h presence... yes checking for termcap.h... yes checking for term.h... no checking for ncurses/term.h... no checking argument type of tputs putc function... int checking whether your getopt() correctly understands double colons in option string... yes checking for an ANSI C-conforming const... yes checking for pid_t... yes checking whether time.h and sys/time.h may both be included... yes checking whether gcc needs -traditional... no checking return type of signal handlers... void checking for getopt_long... yes checking for getopt_long... (cached) yes checking for isastream... yes checking for mkstemp... yes checking for pselect... yes checking for putenv... yes checking for readlink... yes checking for sched_yield... yes checking for setenv... yes checking for setitimer... yes checking for setsid... yes checking for setrlimit... yes checking for sigaction... yes checking for snprintf... yes checking for strlcpy... no checking for strlcat... no checking for strnlen... yes checking for system... yes checking for openpty in -lutil... yes checking for openpty... yes checking for getpty... no checking for grantpt... yes checking for unlockpt... yes checking for getpt... yes checking for pty/tty type... checking pty.h usability... yes checking pty.h presence... yes checking for pty.h... yes OPENPTY configure: checking for pty ranges... checking for tgetent... no checking for tgetent in -lcurses... no checking for tgetent in -lncurses... no checking for tgetent in -ltermcap... yes checking for readline in -lreadline... yes checking whether your readline headers know about rl_set_screen_size... yes checking whether your readline library knows about rl_set_screen_size... checking for rl_set_screen_size... yes checking whether your readline knows about rl_variable_value... yes checking whether your readline knows about rl_readline_version... yes Will rlwrap find command's working directory under /proc/<commands pid>/cwd? let's see... checking for /proc/8714/cwd/configure.ac... yes


configure: creating ./config.status config.status: creating Makefile config.status: creating filters/Makefile config.status: creating doc/Makefile config.status: creating src/Makefile config.status: creating doc/rlwrap.man config.status: creating config.h config.status: executing depfiles commands

Now do: make (or gmake) to build rlwrap make check for instructions how to test it make install to install it

[root@rtest rlwrap-0.37]#


[root@rtest rlwrap-0.37]# make make all-recursive make[1]: Entering directory `/opt/rlwrap-0.37' Making all in doc make[2]: Entering directory `/opt/rlwrap-0.37/doc' sed -e 's#@DATADIR@#/usr/local/share#' rlwrap.man > rlwrap.1 make[2]: Leaving directory `/opt/rlwrap-0.37/doc' Making all in src make[2]: Entering directory `/opt/rlwrap-0.37/src' gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o main.o main.c mv -f .deps/main.Tpo .deps/main.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT signals.o -MD -MP -MF .deps/signals.Tpo -c -o signals.o signals.c mv -f .deps/signals.Tpo .deps/signals.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT readline.o -MD -MP -MF .deps/readline.Tpo -c -o readline.o readline.c mv -f .deps/readline.Tpo .deps/readline.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT pty.o -MD -MP -MF .deps/pty.Tpo -c -o pty.o pty.c mv -f .deps/pty.Tpo .deps/pty.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT completion.o -MD -MP -MF .deps/completion.Tpo -c -o completion.o completion.c mv -f .deps/completion.Tpo .deps/completion.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT term.o -MD -MP -MF .deps/term.Tpo -c -o term.o term.c mv -f .deps/term.Tpo .deps/term.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT ptytty.o -MD -MP -MF .deps/ptytty.Tpo -c -o ptytty.o ptytty.c mv -f .deps/ptytty.Tpo .deps/ptytty.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT utils.o -MD -MP -MF .deps/utils.Tpo -c -o utils.o utils.c mv -f .deps/utils.Tpo .deps/utils.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT string_utils.o -MD -MP -MF .deps/string_utils.Tpo -c -o string_utils.o string_utils.c string_utils.c: In function 鈥榗olourless_strlen鈥

string_utils.c:626: warning: assignment discards qualifiers from pointer target type mv -f .deps/string_utils.Tpo .deps/string_utils.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT malloc_debug.o -MD -MP -MF .deps/malloc_debug.Tpo -c -o malloc_debug.o malloc_debug.c mv -f .deps/malloc_debug.Tpo .deps/malloc_debug.Po gcc -DHAVE_CONFIG_H -I. -I.. -DDATADIR=\"/usr/local/share\" -g -O2 -MT filter.o -MD -MP -MF .deps/filter.Tpo -c -o filter.o filter.c mv -f .deps/filter.Tpo .deps/filter.Po gcc -DDATADIR=\"/usr/local/share\" -g -O2 -o rlwrap main.o signals.o readline.o pty.o completion.o term.o ptytty.o utils.o string_utils.o malloc_debug.o filter.o -lutil -lreadline -ltermcap make[2]: Leaving directory `/opt/rlwrap-0.37/src' Making all in filters make[2]: Entering directory `/opt/rlwrap-0.37/filters' make[2]: Nothing to be done for `all'. make[2]: Leaving directory `/opt/rlwrap-0.37/filters' make[2]: Entering directory `/opt/rlwrap-0.37' make[2]: Nothing to be done for `all-am'. make[2]: Leaving directory `/opt/rlwrap-0.37' make[1]: Leaving directory `/opt/rlwrap-0.37' [root@rtest rlwrap-0.37]#


[root@rtest rlwrap-0.37]# make install Making install in doc make[1]: Entering directory `/opt/rlwrap-0.37/doc' make[2]: Entering directory `/opt/rlwrap-0.37/doc' make[2]: Nothing to be done for `install-exec-am'. test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1" /usr/bin/install -c -m 644 rlwrap.1 '/usr/local/share/man/man1' make[2]: Leaving directory `/opt/rlwrap-0.37/doc' make[1]: Leaving directory `/opt/rlwrap-0.37/doc' Making install in src make[1]: Entering directory `/opt/rlwrap-0.37/src' make[2]: Entering directory `/opt/rlwrap-0.37/src' test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin" /usr/bin/install -c rlwrap '/usr/local/bin' make[2]: Nothing to be done for `install-data-am'. make[2]: Leaving directory `/opt/rlwrap-0.37/src' make[1]: Leaving directory `/opt/rlwrap-0.37/src' Making install in filters make[1]: Entering directory `/opt/rlwrap-0.37/filters' make[2]: Entering directory `/opt/rlwrap-0.37/filters' make[2]: Nothing to be done for `install-exec-am'. test -z "/usr/local/share/man/man3" || /bin/mkdir -p "/usr/local/share/man/man3" /usr/bin/install -c -m 644 RlwrapFilter.3pm '/usr/local/share/man/man3' make[2]: Leaving directory `/opt/rlwrap-0.37/filters' make[1]: Leaving directory `/opt/rlwrap-0.37/filters' make[1]: Entering directory `/opt/rlwrap-0.37' make[2]: Entering directory `/opt/rlwrap-0.37' make[2]: Nothing to be done for `install-exec-am'. test -z "/usr/local/share/rlwrap" || /bin/mkdir -p "/usr/local/share/rlwrap" /bin/mkdir -p '/usr/local/share/rlwrap/filters' /usr/bin/install -c -m 644 filters/README filters/RlwrapFilter.pm filters/RlwrapFilter.3pm filters/count_in_prompt filters/pipeto filters/logger filters/null filters/unbackspace filters/pipeline filters/ftp_filter filters/history_format filters/simple_macro filters/template filters/scrub_prompt filters/paint_prompt filters/censor_passwords filters/listing '/usr/local/share/rlwrap/filters' /bin/mkdir -p '/usr/local/share/rlwrap/completions' /usr/bin/install -c -m 644 completions/testclient completions/coqtop '/usr/local/share/rlwrap/completions' make install-data-hook make[3]: Entering directory `/opt/rlwrap-0.37' chmod a+x /usr/local/share/rlwrap/filters/* make[3]: Leaving directory `/opt/rlwrap-0.37' make[2]: Leaving directory `/opt/rlwrap-0.37' make[1]: Leaving directory `/opt/rlwrap-0.37' [root@rtest rlwrap-0.37]#


[root@rtest rlwrap-0.37]# vi /home/oracle/.bash_profile # .bash_profile

# Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi

# User specific environment and startup programs

export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1 export ORACLE_SID=TEST0422 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib export PATH=$ORACLE_HOME/bin:$PATH

PATH=$PATH:$HOME/bin

export PATH

stty erase ^H

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

~ ~ ~ "/home/oracle/.bash_profile" 25L, 455C written

保存退出,使文件立即生效。

[root@rtest rlwrap-0.37]# su - oracle

[oracle@rtest ~]$ . .bash_profile

3.使用rlwrap [oracle@rtest ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.2.0 - Production on Tue May 6 10:31:02 2014

Copyright (c) 1982, 2005, Oracle. All Rights Reserved.


Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production With the Partitioning, OLAP and Data Mining options

SYS@TEST0422>select * from scott.emp;

即现在就可以使用上下键来调用命令了。