web-dev-qa-db-fra.com

Faire en sorte que les touches Arrow et delete fonctionnent dans la ligne de commande KornShell

Je suis nouveau sur Unix et j'utilise Sun solaris (v10 je pense). J'ai mon jeu de shell en tant que KornShell (ksh). 

Je me demande comment faire en sorte que les touches de direction et de suppression fonctionnent dans la ligne de commande. J'ai fait set -o emacs et le retour arrière fonctionne, mais pas les touches fléchées et les touches supprimer. 

Est-il également possible de définir les flèches haut et bas pour parcourir l'historique de la ligne de commande?

17
user66854

Pour les touches de direction, vous pouvez le mettre dans votre fichier .kshrc de votre répertoire personnel:

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

Notez qu'il y a deux caractères de soulignement avant les lettres à gauche du signe égal. Sur le côté droit de l’égal, l’objectif est d’obtenir le bon caractère de contrôle attribué à l’alias. La façon dont ce script fait cela est en exécutant la commande (via les back-tics) 

echo "\020"

pour obtenir le caractère de contrôle n attribué à __B.

30
Tim

J'ai utilisé la suite et fonctionne bien:

set -o emacs

Remarque: ce sont les caractères de contrôle réels. Dans vi, tapez i ctrl-v puis ctrl-P (si vous voulez un ctrl-p)

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

et ajoutez aussi les lignes ci-dessous:

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

Ne vous battez pas. Demandez à votre administrateur de modifier votre shell par défaut en bash. bash est inclus dans Solaris 10, est hautement compatible ksh et prend en charge les mappages de touches que vous aimez. Vous pouvez lancer bash simplement en tapant:

$ bash

Vous pouvez exécuter bash dans votre profil .si votre administrateur ne vous aide pas. Voici ce que votre administrateur ferait pour remplacer user1 par bash (en tant que 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
7
Bob Stark

Le ksh par défaut peut être ksh88 - qui ne prend pas en charge les macros de clavier alias __. Ksh93 fait. Fondamentalement, si cela ne fonctionne pas - vous utilisez probablement ksh88.

0
Smh