Fai in modo che Arrow ed elimina i tasti funzionino nella riga di comando di KornShell

StackOverflow https://stackoverflow.com/questions/1623256

  •  06-07-2019
  •  | 
  •  

Domanda

Sono nuovo di Unix e sto usando sun solaris (v10 credo). Ho la mia shell impostata come KornShell (ksh).

Mi chiedo come far funzionare i tasti freccia ed eliminare i tasti nella riga di comando. Ho fatto set -o emacs e il backspace funziona, ma non i tasti freccia e i tasti cancella.

Inoltre è possibile impostare il tasto freccia su e giù per scorrere la cronologia della riga di comando?

È stato utile?

Soluzione

Per i tasti freccia, puoi inserirlo nel tuo file .kshrc nella tua home directory:

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

Nota che ci sono due caratteri di sottolineatura prima delle lettere sul lato sinistro del segno di uguale. Sul lato destro della parità, l'obiettivo è quello di ottenere il carattere di controllo adeguato assegnato all'alias. Il modo in cui lo script fa ciò è eseguendo il comando (tramite back-tic)

echo "\020"

per ottenere il carattere control-n assegnato a __B.

Altri suggerimenti

Ho usato quanto segue e funziona bene:

set -o emacs

Nota: questi sono i caratteri di controllo effettivi. In vi, digita i ctrl-v quindi ctrl-P (se vuoi un ctrl-p)

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

e aggiungi anche le righe seguenti:

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

Non combatterlo. Chiedi all'amministratore di modificare la shell predefinita in bash. bash è incluso in Solaris 10, è altamente compatibile con ksh e supporta i mapping dei tasti che ti piacciono. Puoi avviare bash semplicemente digitando:

$ bash

Potresti eseguire bash dal tuo .profile se il tuo amministratore non è utile. Ecco cosa farebbe l'amministratore per modificare user1 in bash (come 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

Il ksh predefinito potrebbe essere ksh88 - che non supporta le macro della tastiera alias __. Ksh93 lo fa. Fondamentalmente, se non funziona, probabilmente stai usando ksh88.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top