Fai in modo che Arrow ed elimina i tasti funzionino nella riga di comando di KornShell
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?
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.