【问题标题】:Make Arrow and delete keys work in KornShell command line使箭头和删除键在 KornShell 命令行中工作
【发布时间】:2010-12-10 01:03:33
【问题描述】:

我是 Unix 新手,正在使用 sun solaris(我认为是 v10)。我将外壳设置为 KornShell (ksh)。

我想知道如何使箭头键和删除键在命令行中工作。我已经完成了 set -o emacs 和退格工作,但不是箭头键和删除键。

也可以设置上下箭头键循环浏览命令行历史吗?

【问题讨论】:

    标签: unix shell ksh


    【解决方案1】:

    不要与之抗争。 只需让您的管理员将您的默认 shell 更改为 bash。 bash 包含在 Solaris 10 中,与 ksh 高度兼容,并且它支持您喜欢的键映射。 您只需键入以下内容即可启动 bash:

    $ bash
    

    如果您的管理员没有提供帮助,您可以从 .profile 中执行 bash。 以下是您的管理员将 user1 更改为 bash(以 root 身份)的操作:

    # passwd -e user1
    Old shell: /bin/ksh
    New shell: /usr/bin/bash        <- You type this, use whence bash to look up the path
    passwd: password information changed for user1
    

    【讨论】:

    • Solaris 10 中没有chsh
    【解决方案2】:

    对于箭头键,您可以将其放入主目录中的 .kshrc 文件中:

    set -o emacs
    alias __A=`echo "\020"`     # up arrow = ^p = back a command
    alias __B=`echo "\016"`     # down arrow = ^n = down a command
    alias __C=`echo "\006"`     # right arrow = ^f = forward a character
    alias __D=`echo "\002"`     # left arrow = ^b = back a character
    alias __H=`echo "\001"`     # home = ^a = start of line
    alias __Y=`echo "\005"`     # end = ^e = end of line
    

    请注意,等号左侧的字母前有两个下划线字符。在等号的右边,目标是获得分配给别名的正确控制字符。该脚本执行此操作的方式是运行命令(通过 back-tics)

    echo "\020"
    

    获取分配给 __B 的 control-n 字符。

    【讨论】:

    • 如果你能说出以上几行的作用会更有帮助吗?
    • 另外,如果您没有 .kshrc 文件,请创建一个并将上述内容添加到其中。使用以下命令“ENV=$HOME/.kshrc; export ENV”设置 ENV,通过发出“printenv”命令再次确保
    • 请注意 pdksh 和 mksh 都使用 .mkshrc 文件
    • __A 是做什么的?这是绑定到向上箭头的任意或必要的吗?如果我想为^? 的删除键起别名
    【解决方案3】:

    默认的 ksh 可能是 ksh88 - 它不支持别名 __ 键盘宏。 Ksh93 可以。基本上,如果它不起作用 - 你可能正在使用 ksh88。

    【讨论】:

      【解决方案4】:

      我使用了以下并且工作正常:

      set -o emacs
      

      注意:这些是实际的控制字符。在 vi 中,输入 i ctrl-v 然后 ctrl-P(如果你想要 ctrl-p)

      alias _A=^P
      alias _B=^N
      alias _D=^B
      alias _C=^F
      

      并添加以下行:

      alias __A=^P
      alias __B=^N
      alias __D=^B
      alias __C=^F
      

      【讨论】:

        【解决方案5】:

        因为我花了很长时间才弄清楚我的 Mac 上的删除键,所以要让删除键起作用,您可以将 stty erase ^? 添加到您的 .kshrc 文件中。无需为^? 输入实际字符,您只需按删除键,它将输出^?。所以结合蒂姆的回答,我的.kshrc 文件看起来像

        set -o emacs
        alias __A=`echo "\020"`     # up arrow = ^p = back a command
        alias __B=`echo "\016"`     # down arrow = ^n = down a command
        alias __C=`echo "\006"`     # right arrow = ^f = forward a character
        alias __D=`echo "\002"`     # left arrow = ^b = back a character
        alias __H=`echo "\001"`     # home = ^a = start of line
        alias __Y=`echo "\005"`     # end = ^e = end of line
        stty erase                  # prevent command from being echoed
        stty erase ^?               # allow for delete key to work
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-11-12
          • 1970-01-01
          • 1970-01-01
          • 2011-12-11
          • 2015-11-10
          • 1970-01-01
          • 2022-01-03
          • 2022-01-25
          相关资源
          最近更新 更多