歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下SQL*Plus退格和方向鍵

Linux下SQL*Plus退格和方向鍵

日期:2017/2/27 15:58:52   编辑:Linux教程
Linux環境下,使用SQL*Plus時有時會出現退格鍵不好使用的情況。此時,可以一般可用使用stty命令來解決。

stty(set tty,設置tty)命令用於檢查和修改當前注冊的終端的通信參數。UNIX系統為鍵盤的輸入和終端的輸出提供了重要的控制手段,可以通過stty命令對特定終端或通信線路設置選項。該命令可以改變並打印終端行設置。

看這個命令的幫助:
[oracle@oatest ~]$ stty --help
Usage: stty [-F DEVICE] [--file=DEVICE] [SETTING]...
  or:  stty [-F DEVICE] [--file=DEVICE] [-a|--all]
  or:  stty [-F DEVICE] [--file=DEVICE] [-g|--save]
Print or change terminal characteristics.

  -a, --all          print all current settings in human-readable form
  -g, --save         print all current settings in a stty-readable form
  -F, --file=DEVICE  open and use the specified DEVICE instead of stdin
      --help     display this help and exit
      --version  output version information and exit

Optional - before SETTING indicates negation.  An * marks non-POSIX
settings.  The underlying system defines which settings are available.

Special characters:
 * dsusp CHAR    CHAR will send a terminal stop signal once input flushed
   eof CHAR      CHAR will send an end of file (terminate the input)
   eol CHAR      CHAR will end the line
 * eol2 CHAR     alternate CHAR for ending the line
   erase CHAR    CHAR will erase the last character typed
   intr CHAR     CHAR will send an interrupt signal
   kill CHAR     CHAR will erase the current line
 * lnext CHAR    CHAR will enter the next character quoted
   quit CHAR     CHAR will send a quit signal
 * rprnt CHAR    CHAR will redraw the current line
   start CHAR    CHAR will restart the output after stopping it
   stop CHAR     CHAR will stop the output
   susp CHAR     CHAR will send a terminal stop signal
 * swtch CHAR    CHAR will switch to a different shell layer
 * werase CHAR   CHAR will erase the last word typed

Special settings:
  N             set the input and output speeds to N bauds
 * cols N        tell the kernel that the terminal has N columns
 * columns N     same as cols N
   ispeed N      set the input speed to N
 * line N        use line discipline N
   min N         with -icanon, set N characters minimum for a completed read
   ospeed N      set the output speed to N
 * rows N        tell the kernel that the terminal has N rows
 * size          print the number of rows and columns according to the kernel
   speed         print the terminal speed
   time N        with -icanon, set read timeout of N tenths of a second
......
Handle the tty line connected to standard input.  Without arguments,
prints baud rate, line discipline, and deviations from stty sane.  In
settings, CHAR is taken literally, or coded as in ^c, 0x37, 0177 or
127; special values ^- or undef used to disable special characters.

Report bugs to <[email protected]>.
與退格鍵相關的設置是erase,它表示刪除最後一個字符。
$stty erase ^H

說明:按下退格鍵會顯示成^H 如果在當前窗口執行的話,只對當前的窗口有效,下次登陸的時候還需要重新設置,可以把這個命令寫入shell 的配置文件,如~/.bashrc 中,這樣每次都能生效了。

方向鍵
Windows下使用方向鍵是沒有問題的,但是在Linux下,方向鍵是使用不了。此時可以安裝一下rlwrap工具。
SQL> ^[[A    ----[按方向鍵會顯示異常]

rlwrap本身是個遵循GPL 標准的Shell 腳本,可以運行任何你提供給它的命令包括參數,並添加命令歷史浏覽功能。

1) 關於rlwrap
[root@oradb ~]# yum info rlwrap
Loaded plugins: fastestmirror, refresh-packagekit, security
Determining fastest mirrors
base                                                                                                                                             | 1.3 kB     00:00     
extras                                                                                                                                           | 1.3 kB     00:00     
Installed Packages
Name        : rlwrap
Arch        : x86_64
Version     : 0.37
Release     : 1.el6
Size        : 196 k
Repo        : installed
From repo   : extras
Summary     : Wrapper for GNU readline
URL         : http://utopia.knoware.nl/~hlub/rlwrap/
License     : GPLv2+
Description : rlwrap is a 'readline wrapper' that uses the GNU readline library to
            : allow the editing of keyboard input for any other command. Input
            : history is remembered across invocations, separately for each command;
            : history completion and search work as in bash and completion word
            : lists can be specified on the command line.

2)安裝rlwrap
[root@oatest soft]# yum install -y rlwrap

3)測試
[oracle@oatest ~]$ rlwrap sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 27 17:42:50 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


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

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0    Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> select * from v$version; --[按方向鍵可用正常輸入]
現在就可以上下翻動了。

4)設置別名
但是這樣沒事都需要加上rlwrap 也是很麻煩的,可以對rlwrap 做一個別名,放到shell 的配置文件裡,在~/.bashrc 文件裡添加如下內容:
alias sqlplus='rlwrap sqlplus'

5)讓參數生效
[oracle@oatest ~]$  source ~/.bashrc

6)測試
[oracle@oatest ~]$ type sqlplus
sqlplus is aliased to `rlwrap sqlplus'

[oracle@oatest ~]$ $ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jun 27 17:42:50 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


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

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0    Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> select * from v$version; --[按方向鍵可用正常輸入]

其他一些組合鍵:
Ctrl+A:ahead,到行的頂端,相當於 Home
Ctrl+E:end,到行的末端,相當於end
Ctrl+B:behind,後退一個字符,相當於left
Ctrl+F:forward,前進一個子放入,相當於right
Ctrl+P:prev.,上一行歷史記錄,相當於up
Ctrl+N:next.,下一行歷史記錄,相當於down
Ctrl+U:undo,回復操作,這行就被清空掉了
Ctrl+W:剪切
Ctrl+Y:粘貼
Ctrl+L:cLear,清屏
Copyright © Linux教程網 All Rights Reserved