No estoy seguro de cómo redactar esto, pero a menudo me encuentro escribiendo comandos como este:
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
Por lo general, solo escribo la ruta dos veces (con la finalización de la pestaña) o copiaré y pegaré la ruta con el cursor. ¿Hay algún bashfoo que haga que esto sea más fácil de escribir?
bash
command-line
clipboard
line-editor
usuario1028270
fuente
fuente
bash-fu
:)Respuestas:
Hay varios trucos (creo que hay un duplicado que se encuentra), pero por esto tiendo a hacer
que se expande a tus órdenes.
Esto se conoce como expansión de llaves . En la forma utilizada aquí, la
{}
expresión especifica una serie de cadenas separadas por comas. Estos "expanden" la/etc/prog/dir1/myconfig.yml{,.bak}
expresión completa , reemplazando la{}
parte con cada cadena a su vez: la cadena vacía, dando/etc/prog/dir1/myconfig.yml
y luego.bak
dando/etc/prog/dir1/myconfig.yml.bak
. El resultado esEstas expresiones se pueden anidar:
produce
Hay una variante que usa números para producir secuencias:
produce
y también puedes especificar el paso:
produce
fuente
.bak
.La expansión del historial puede ser útil para este tipo de cosas (suponiendo que el historial de bash esté habilitado).
En su ejemplo, podría hacer:
Aquí, se
!#
refiere a la línea actual, se!#:1
refiere al parámetro 1 en la línea actualy
!#:1.bak
refiere al parámetro 1 en la línea actual con '.bak' pegado al final.Cuando tiene el especificador de historial escrito, puede usar Ctrl+ Alt+E para expandirlo a su valor real si desea, por ejemplo, verificar o modificar el nombre de archivo.
La sección "Expansión del historial" en las páginas de manual de bash tiene más información.
fuente
Similar a la respuesta de progo, pero algo más simple:
C-w
corta ("mata") la palabra a la izquierda del cursor, laC-y
inserta ("tira") nuevamente.fuente
También puede cortar y pegar (kill-yank en términos de emacs / bash) desde la línea de comandos para duplicar partes para su edición.
M-d
mata hacia adelante hasta el límite de la palabra, y puede matar el texto varias veces y todos se concatenan juntos en una sola 'pegar' para tirar. ¡Conveniente!Yank todo esto de vuelta a la línea de comandos en el cursor por
C-y
. Entonces, si tiene una línea como esta (el elemento de bloque █ indica la posición del cursor):De cualquier manera que prefiera hacerlo, familiarizarse con lo que bash tiene para ofrecer en el departamento de claves interactivas será beneficioso. http://web.mit.edu/gnu/doc/html/features_7.html
fuente
En
tcsh
ozsh
, Alt+Ctrl+_enemacs
modo (copy-prev-word
widget) inserta la última palabra, entoncesbash
tiene uncopy-backward-word
widget (no está vinculado a ninguna tecla de forma predeterminada) pero que solo copia la palabra en el búfer de anillo, también deberías presionar Ctrl-Y(enemacs
modo) para tirar de ella. Pero podrías hacer:Para tener Alt+Ctrl+_tanto copiar / snarf y pegar / tirar como en
tcsh
/zsh
.fuente