Utilisation de la flèche vers le haut pour exécuter la commande précédente

11

De quelle configuration ai-je besoin pour utiliser la flèche vers le haut pour exécuter la commande précédente? Avec Mac, je peux utiliser la flèche vers le haut pour réexécuter la commande que je viens d'exécuter, mais cela ne semble pas fonctionner avec mon shell bash.

J'utilise 8.04 (je ne peux pas utiliser la dernière distribution en raison de certains problèmes de version du compilateur).

AJOUTÉE

Je n'ai rien changé car c'est une nouvelle installation avec VMWare Fusion sur Mac.

prosseek
la source
3
Dans la configuration par défaut, la flèche vers le haut fonctionne parfaitement: avez-vous modifié quelque chose?
enzotib
comme @enzotib le dit, bash le fera par défaut, mais d'autres, par exemple sh ne le feront pas!
Rory Alsop

Réponses:

10

Assurez-vous que votre historique est activé. Vous pouvez vérifier l'état actuel en exécutant:

set -o

La sortie doit contenir (notez la history onligne):

histexpand      on
history         on
ignoreeof       off

Si ce n'est pas activé, vous devez exécuter set -o history. Pour rendre ce changement persistant, vous devez l'ajouter à ~/.bashrc:

set -o history

Si vous souhaitez exécuter la commande précédente, vous pouvez également exécuter la commande suivante:

!!

Depuis la page de manuel de Bash :

Event Designators
   An event designator is a reference to a command line entry in the history list.

   !      Start a history substitution, except when followed by a blank, newline,
          carriage return, = or ( (when the extglob shell option  is
          enabled using the shopt builtin).
   !n     Refer to command line n.
   !-n    Refer to the current command line minus n.
   !!     Refer to the previous command.  This is a synonym for `!-1'.
   !string
          Refer to the most recent command starting with string.
   !?string[?]
          Refer to the most recent command containing string.  The trailing ? 
          may be omitted if string is followed immediately by a newline.
   ^string1^string2^
          Quick  substitution.  Repeat the last command, replacing string1 with
          string2.  Equivalent to ``!!:s/string1/string2/'' (see Modifiers below).
   !#     The entire command line typed so far.

Si vous utilisez Bash, vous pouvez également utiliser les raccourcis par défaut pour naviguer dans l'historique:

  • Ctrl+ P: Commande précédente
  • Ctrl+ N: Commande suivante

    Commandes de manipulation de l'historique previous-history (Cp) Récupère la commande précédente de la liste d'historique, en reculant dans la liste. next-history (Cn) Récupère la commande suivante dans la liste d'historique, en avançant dans la liste.

Lekensteyn
la source
1
J'ai vérifié que la configuration est correcte, mais la touche flèche vers le haut ne fonctionne pas. Cependant, je peux utiliser Ctrl-P / N pour obtenir le même résultat. Merci.
prosseek
@prosseek Dans ce cas, avez-vous changé /etc/inputrcou ~/.inputrc? De plus, quelle séquence d'échappement les flèches haut et bas produisent-elles dans le terminal que vous utilisez? Pour vérifier, exécutez cat, puis sur la ligne vide, appuyez sur haut et bas, puis sur Ctrl + C pour quitter cat. Ici, ça produit ^[[A^[[B.
geirha
@geirha: Je n'ai pas le fichier ~ / .inputrc, et je n'ai rien changé / etc / inputrc. Et pour la séquence d'échappement, je n'ai rien vu à l'écran.
prosseek
@prosseek Il semble alors que les touches fléchées n'atteignent jamais le terminal. Peut-être que l'interface VMWare les filtre ou quelque chose comme ça.
geirha
14

Assurez-vous que vous utilisez réellement bash. Un piège commun crée un nouvel utilisateur avec useraddau lieu de adduserou l'application Utilisateurs et groupes (GUI). Avec le premier, le jeu de shell par défaut est /bin/sh. Exécutez chsh( ch ange sh ell) pour vous assurer qu'il est réglé sur /bin/bash.

geirha
la source
1

Dans le terminal, entrez:

gedit  ~/.inputrc

Copiez ensuite collez et enregistrez:

"\e[A": history-search-backward
"\e[B": history-search-forward
"\e[C": forward-char
"\e[D": backward-char

À partir de maintenant, dans le terminal, vous pouvez effectuer une recherche incrémentielle.Tout ce que vous avez à faire pour trouver une commande précédente est d'entrer par exemple les deux ou trois premières lettres et la flèche vers le haut vous y mèneront rapidement.

Shailesh Singh
la source