Altera a chave que mostra as linhas de comando anteriores em ksh

3

Na maioria das shells no Linux, quando você pressiona a tecla Seta para cima , mostra as linhas de comando anteriores do histórico da linha de comando.

A minha pergunta é, para o ksh shell,

  1. Como configuro outra chave para mostrar a linha de comando anterior?

  2. Como faço para desativar a tecla Seta para cima para que ela não mostre a linha de comando anterior?

por user6507246 08.07.2016 / 10:22

1 resposta

3

A maioria dos tutoriais que você pode encontrar são sobre o bash. Ksh é muito bom em scripts, mas é ruim em uso interativo. Use zsh (best) ou bash (second-best) como uma linha de comando, se puder.

Existem duas implementações principais do ksh hoje: o shell Ksh real ksh93, e o clone mksh (derivado do pdksh longo e não-mantido). Eles têm diferentes recursos de ligação de chaves.

No ksh93, as teclas Acima e Abaixo não se movem no histórico da linha de comando por padrão. As teclas padrão são Ctrl + P e Ctrl + N . Você pode alterar as combinações de teclas por meio do KEYBD trap; é um pouco desajeitado, pois você só pode traduzir chaves para outras chaves e todas as ligações devem ser definidas no mesmo lugar. Aqui está como fazer Up e Abaixo navegar pelo histórico (este código vai para ~/.kshrc ):

set -o emacs
function KEYBD_trap {
  case ${.sh.edchar} in
    $'\e'[[O]A) .sh.edchar=$'\e>';;
    $'\e'[[O]B) .sh.edchar=$'\e<';;
  esac
}
trap KEYBD_trap KEYBD

\e[A e \eOA , em que \e representa o caractere de escape ASCII , são os duas seqüências de escape que o terminal pode enviar quando o usuário pressiona a tecla Up (depende do terminal e de seu modo atual). Da mesma forma \e[A e \eOA é para Down . $'\e é uma notação que você pode usar em ksh para o caractere de escape; o padrão [[O] corresponde a [ ou O .

No mksh, você define as associações de teclas por meio do bind builtin. Up e Down navegam o histórico por padrão (além de kbd > Ctrl + P e Ctrl + N ). O código a seguir (a ser colocado em ~/.mkshrc ) desativa as teclas de seta:

bind '^[OA'=
bind '^[[A'=
bind '^[OB'=
bind '^[[B'=

^[ é uma notação que você pode usar nas ligações de chave do mskh para o caractere de escape.

Todas essas informações estão na página man do shell, não necessariamente em uma forma compreensível se você já não estiver familiarizado com shells do Unix.

    
por 09.07.2016 / 02:43