¿Cómo acceder al historial sobre la marcha en Unix?

12

Por ejemplo, si hago un

mkdir thisismyfolder912

Recuerdo que hay una manera más fácil de cambiar thisismyfolder912que tener que hacer un

cd thisismyfolder912

¿Cómo es y cómo funciona? Además, ¿cuáles son las otras formas en que puedo usar esto?

Lazer
fuente
1
Use TAB-complete para comandos y directorios que no están en su lista de historial reciente. cd this<TAB>
invertir

Respuestas:

10

¿Estás hablando de la expansión de la historia clásica o del procesamiento de Readline? cd !$en la siguiente línea de entrada va a sustituir en el último argumento de la línea anterior, o M-.o M-_se tire de éste utilizando Readline.

jmb
fuente
1
Publicar en otra pregunta que discute Alt +.
Michael Mrozek
Yo estaba buscando cd !$. "Expansión de la historia clásica o procesamiento de Readline" No entiendo exactamente lo que quieres decir ...
Lazer
2
@Lazer !$es una expansión de la historia ; el shell lo procesa al analizar su comando. METRO-. es una pulsación de tecla readline; readline es la biblioteca que maneja cada tecla que presiona, y ve que presionó M-. y escribe el último argumento del último comando para usted automáticamente
Michael Mrozek
9

Si su pregunta es sobre el acceso al historial de comandos, pruebe este comando bien nombrado

history 

También puede probar Ctrl+ ry comenzar a escribir un comando que está tratando de recordar que ha escrito recientemente.

(reverse-i-search)`cd ': cd mydir/data/

Presione ESCpara seleccionar el comando o salir. Esto funciona para mí en SuSE al menos; No estoy seguro acerca de otras distribuciones.

Banjer
fuente
44
Whoa! Esto realmente va a cambiar mi vida. Jódete history | grep ...!
Oli
Esto no es sólo en relación SuSE-, creo que es una característica Bash :)
sakisk
Acabo de leer sobre el uso vipara administrar su línea de comando. Se ve súper genial. usando vi para editar comandos de shell
Banjer
7

Es tan simple como Alt+.

$ mkdir lasdfjalsdkjf
$ cd 

Alt + .

$ cd lasdfjalsdkjf
Umang
fuente
¿Cómo conseguiste la caja elegante alrededor de Alt? No lo vi en la guía de ayuda.
Banjer
2
@Banjer: use <kbd></kbd>etiquetas para rodear la clave.
Lazer
@Banjer<kbd>
Michael Mrozek
Además, esto es lo mismo que la respuesta de jmb
Michael Mrozek
2

esto siempre me ha funcionado:

mkdir thisismyfolder
cd $_
Arenoso
fuente
Sin embargo, $!tenga cuidado con esto: se expande hasta la última palabra que escribió realmente, se $_expande hasta la última palabra después de la expansión , por lo que puede echo /tmp/tmpfile*ver un montón de archivos que desea eliminar, pero luego rm $_solo eliminará uno de ellos.
jmb
1

Si pones una punta de otro hilo, si pones:

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

en su .bashrc, entonces, puede comenzar a escribir algo de su historial, y luego presionar la flecha hacia arriba, y luego, en lugar de pasar por su historial elemento por elemento, saltará directamente a las entradas anteriores que comienzan con lo que ya ha mecanografiado.

Supongo que esto no ayuda mucho con el ejemplo particular dado en la pregunta, pero es una cosa que me ayuda a acceder al historial sobre la marcha.

precioso
fuente
1

Si usas bash te sugiero pushdy popd. Puede crear una pila de directorios y explorarla rápidamente. Ver este ejemplo:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$
lcipriani
fuente
Si usa un mensaje abreviado, hace que las publicaciones sean más legibles. (Me refiero a eliminar el usuario y los nombres de host. Entiendo que mostrar el PWD en lugar de solo $es útil al hacer una demostración pushd, etc.)
Pausado hasta nuevo aviso.
1

En una nota relacionada, recomiendo usar histverify en bash. Pon esto en tu ~ / .bashrc:

shopt -s histverify

Esto hará que bash imprima el comando después de expandir! $ U otras funciones del historial, y le dará la oportunidad de verlo antes de presionar enter nuevamente para ejecutarlo. Para mí, el control de la cordura vale la pena presionar ocasionalmente teclas adicionales. Quiero asegurarme de que estoy ejecutando el cd foocomando, no el rm -rf fooque ...

Frecuentemente uso el Ctrl-Renfoque, así como Alt-.(que es una buena opción para el escenario que describe). Lo usaré! $ En ocasiones.

Estas son técnicas muy útiles de uso general.

Pero para abordar su pregunta específica:

Hacer un directorio y cd'ing directamente en él es una combinación tan común que es útil tener una función para envolverlo.

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

Uso: mcd thisismyfolder

jmanning2k
fuente
1

Si su shell utiliza readline (que es el caso bash), ¿puede hacer algo como presionar ATL+ .juntos?

De la documentación de GNU Readline :

yank-last-arg (M-. o M-_)

Inserte el último argumento en el comando anterior (la última palabra de la entrada del historial anterior). Con un argumento, compórtate exactamente como yank-nth-arg. Las llamadas sucesivas a yank-last-arg retroceden en la lista del historial, insertando el último argumento de cada línea.

Elitmiar
fuente