【问题标题】:Using arrow keys within Db2 CLP in Linux?在 Linux 的 Db2 CLP 中使用箭头键?
【发布时间】:2020-06-10 08:03:36
【问题描述】:

当我在 Linux 上运行 Db2 CLP(命令行处理器)并保留在 CLP 中时,箭头键无法按预期工作。

例如:而不是显示我执行的上一个命令,按向上箭头产生:^[[A 并按向左箭头产生:^[[D.

见下文:

[db2inst1@willow ~]$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 11.5.0.0

You can issue database manager commands and SQL statements from the command
prompt. For example:
    db2 => connect to sample
    db2 => bind sample.bnd

For general help, type: ?.
For command help, type: ? command, where command can be
the first few keywords of a database manager command. For example:
 ? CATALOG DATABASE for help on the CATALOG DATABASE command
 ? CATALOG          for help on all of the CATALOG commands.

To exit db2 interactive mode, type QUIT at the command prompt. Outside
interactive mode, all commands must be prefixed with 'db2'.
To list the current command option settings, type LIST COMMAND OPTIONS.

For more detailed help, refer to the Online Reference Manual.

db2 => ^[[A

我在运行在 Windows 10 上的本地 cygwin 终端中使用 bash,在远程 CentOS Linux 机器上使用 bash,并使用 SSH 进行连接。是否有解决此问题的配置选项?

【问题讨论】:

  • 您的意思是在 CLP 中还是在 bash 中执行 db2 后使用这些键?
  • 在 CLP 中会发生这种情况
  • 为什么投反对票?问题不是很清楚吗?我添加了一个示例。

标签: linux bash ssh db2 keymapping


【解决方案1】:

这提供了解决方法,而不是修复。

Db2 交互式 CLP(使用默认提示 db2 =>)无法正确处理 linux shell 的向上和向下箭头键,我不知道如何解决。即使用户的默认 shell 是 bash,交互式 Db2 clp 也无法识别向上和向下箭头键。

Db2 Interactive CLP 在本机上正确处理 MS-Windows 上的向上和向下箭头键。

一种解决方法是在 Db2 交互式 CLP 中同时使用 History 命令和 R (runcmd)。例如,如果您在交互式 CLP 中运行 History 命令,它将显示在此会话期间运行的命令(但不是以前的会话),并且每个命令都有一个编号。您可以使用 R n(其中 n 是数字)重复该命令。您可以在提交之前使用 edit n 来编辑命令。您可以通过变量控制历史记录中的条目数、用于编辑历史记录的编辑器等,有关详细信息,请参阅 Db2 知识中心。

另一种解决方法是使用基于 java 的 clpplus 命令,在 linux 上该命令会正确响应向上和向下箭头键。

第三种解决方法是从 MS-Windows 本地使用交互式 CLP(但需要在 MS-Windows 上安装合适的 Db2 客户端),并从那里管理远程数据库。尴尬的。但对于不需要等待 ssh 会话打开、登录、运行和退出的快速操作来说很方便。

许多开发人员和 DBA 使用的第四个选项是永远不要使用 CLP 的交互模式,而只使用命令模式,然后使用 linux shell 的功能进行调用和编辑等目的。如果您为自己喜欢的编辑器适当地配置了 shell 选项,则向下箭头键的行为正确。

【讨论】:

  • 非常感谢毛,这似乎回答了我的问题。我对不使用交互模式的唯一抱怨是,我必须转义某些字符,例如括号(除非我遗漏了什么?) - 但是鉴于上述所有选项,我可以停止尝试修复它并继续前进: -)
  • 通常情况下,您总是会在 SQL 代码周围使用双引号。例如。 db2 "select max(c) from t" 允许您使用 shell 变量 $ 但无需转义任何其他字符,例如括号或单引号
  • 对于多行 SQL,使用文本文件,或者(更好)一个像样的 SQL GUI 客户端
【解决方案2】:

箭头键在 Db2 CLP 中无法按预期工作。
使用 edit 命令运行您的首选编辑器来编辑您最后调用的语句(或历史记录中的任何内容),然后能够运行此编辑后的命令。
使用history 命令获取您之前调用的语句的编号。例如,您可以在runcmde[dit] 命令中使用此编号。
为了能够在交互模式下使用多行命令,最好使用 db2 -t (statement terminator == ;) 或 db2 -td@ (statement terminator == @ 或使用您的首选)。

【讨论】:

  • 谢谢马克。我将另一个答案标记为正确,主要是因为他先到了那里,但两者都非常有用,因此得到了赞成。
【解决方案3】:

作为 Linux 上的另一种解决方法:您可以安装包 rlwrap 然后使用

rlwrap db2 -t

这将允许您使用向上和向下箭头键调用命令历史记录。 Db2 的本机历史调用命令(使用 re 命令)也可以继续工作。

rlwrap v 0.43 2016 年 7 月 19 日

* 它是什么:

rlwrap 是一个'readline wrapper',一个使用 GNU 的小型实用程序 readline 库允许编辑任何键盘输入 命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-19
    • 2019-11-18
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    相关资源
    最近更新 更多