Uso della freccia su per eseguire il comando precedente


11

Di quale installazione ho bisogno per usare la freccia su per eseguire il comando precedente? Con Mac, posso usare la freccia su per eseguire nuovamente il comando che ho appena eseguito, ma non sembra funzionare con la mia shell bash.

Uso 8.04 (non riesco a utilizzare la distribuzione più recente a causa di alcuni problemi con la versione del compilatore).

AGGIUNTO

Non ho cambiato nulla perché è una nuova installazione con VMWare Fusion su Mac.


3
Nella configurazione predefinita, la freccia su funziona perfettamente: hai modificato qualcosa?
enzotib,

come dice @enzotib bash lo farà di default, ma alcuni altri, ad esempio sh no!
Rory Alsop,

Risposte:


10

Assicurati che la tua cronologia sia abilitata. È possibile verificare lo stato corrente eseguendo:

set -o

L'output dovrebbe contenere (notare la history onriga):

histexpand      on
history         on
ignoreeof       off

Se questo non è abilitato, è necessario eseguire set -o history. Per rendere persistente questa modifica, è necessario aggiungerla a ~/.bashrc:

set -o history

Se si desidera eseguire il comando precedente, è possibile eseguire anche il comando successivo:

!!

Dalla pagina del manuale di 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.

Se stai usando Bash, puoi usare le scorciatoie predefinite anche per navigare nella cronologia:

  • Ctrl+ P: Comando precedente
  • Ctrl+ N: Comando successivo

    Comandi per la manipolazione della cronologia precedenti (Cp) Recupera il comando precedente dall'elenco cronologico, tornando indietro nell'elenco. next-history (Cn) Recupera il comando successivo dall'elenco della cronologia, spostandosi in avanti nell'elenco.


1
Ho verificato che l'installazione sia corretta, ma il tasto freccia SU non funziona. Tuttavia, posso usare Ctrl-P / N per ottenere lo stesso risultato. Grazie.
prosseek,

@prosseek In tal caso, hai cambiato /etc/inputrco ~/.inputrc? Inoltre, quale sequenza di escape produce la freccia su e giù nel terminale che stai utilizzando? Per controllare, corri cat, poi sulla riga vuota, premi uparrow e downarrow, quindi Ctrl + C per uscire da cat. Qui produce ^[[A^[[B.
geirha,

@geirha: Non ho il file ~ / .inputrc e non ho cambiato nulla / etc / inputrc. E per la sequenza di escape, non ho visto nulla sullo schermo.
prosseek,

@prosseek Quindi sembra che i tasti freccia non raggiungano mai il terminale. Forse l'interfaccia VMWare li sta filtrando o qualcosa del genere.
geirha,

14

Assicurati di utilizzare effettivamente bash. Un gotcha comune sta creando un nuovo utente con useraddinvece di addusero Utenti e gruppi (GUI). Con il primo, il set di shell predefinito è /bin/sh. Esegui chsh( ch ange sh ell) per assicurarti che sia impostato su /bin/bash.


1

Nel terminale inserire:

gedit  ~/.inputrc

Quindi copia incolla e salva:

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

D'ora in poi nel terminale puoi fare una ricerca incrementale, tutto ciò che devi fare per trovare un comando precedente è inserire dire che le prime due o tre lettere e la freccia verso l'alto ti porteranno rapidamente lì.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.