2010-08-20 21 views
12

En Matlab, hay una característica muy buena que me gusta. Supongamos que he escrito el comando very-long-command y luego algunos comandos varios después. Luego, más tarde, si necesito el comando largo de nuevo, simplemente escribo very y presiono la tecla de flecha hacia arriba, aparece mi comando largo. Encuentra el último comando que comienza con very. No pude hacer lo mismo en la línea de comandos de Unix, cuando trato de hacerlo, ignora todo lo que escribí y vuelve a los últimos comandos en orden cronológico. ¿Hay una manera de hacerlo?Recuperación del historial de comandos similar a Matlab en la línea de comandos de Unix

+0

Matlab tiene una buena configuración predeterminada. Siempre me pregunto por qué la gente de Unix no puede proporcionar una buena configuración predeterminada para estas cosas. – compie

Respuesta

8

En bash, golpeando ctrl - r le permita realizar un historial:

$ echo 'something very long' 
something very long 
$ # blah 
$ # many commands later... 
(reverse-i-search)`ec': echo 'something very long' 

En el fragmento anterior, me golpeó ctrl - r en la siguiente línea después de # many commands later... , y luego tipeado ec que me devolvió al comando echo. En ese punto, al presionar , ingrese para ejecutar el comando.

+0

Gracias! Tengo otra pregunta rápida, ¿qué pasa si hay dos comandos largos recientemente utilizados que comienzan con eco, ¿cómo puedo cambiar entre los dos con este método? – AgCl

+1

@AgCl: [Esta publicación de blog] (http://ronny.haryan.to/archives/2005/03/14/tip-history-search-in-bash/) explica cómo configurar 'history-search-forward 'y' history-search-backward' para navegar por el historial. –

+0

El enlace de arriba está muerto –

3

Puede hacer lo mismo con "!". Por ejemplo:

$ echo "Hello" 
Hello 
$ !echo 
echo "Hello" 
Hello 

Sin embargo, es generalmente una mala idea para hacer este tipo de cosas (¿y si el último comando hizo algo destructivo?). Si espera que reutilice algo, le sugiero que cree un script de shell y lo guarde en algún lugar (cada vez que planeo reutilizar algo, creo un script en ~/.local/bin).

+0

Gracias, está casi tan cerca de Matlab, pero no puedo ver todo el comando antes de presionar enter. Voy a devolver la respuesta cuando tenga suficiente representante. – AgCl

+0

! Echo: p mostrará el comando (bash de todos modos) y puede optar por ejecutarlo o no. –

+0

@Ron, genial. Gracias. –

10

En bash esta funcionalidad es provista por los comandos history-search-forward y history-search-backward, que por defecto no están vinculados a ninguna tecla (ver here). Si ejecuta

bind '"\e[A":history-search-backward' 
bind '"\e[B":history-search-forward' 

que hará de flecha hacia arriba y flecha hacia abajo de búsqueda hacia atrás y adelante a través de la historia una cadena de caracteres entre el comienzo de la línea actual y el punto. Vea también this related Stack Overflow question.

Cuestiones relacionadas