Todos sabemos cómo usar <ctrl>-R
la búsqueda inversa en el historial, pero ¿sabía que puede usar la <ctrl>-S
búsqueda hacia adelante si configura stty stop ""
? Además, ¿alguna vez has intentado ejecutar bind -p para ver todos los atajos de teclado enumerados? Hay más de 455 en Mac OS X por defecto.
¿Cuál es tu truco oscuro favorito, atajo de teclado o configuración de shopt usando bash?
bash
command-line
Robert Harvey
fuente
fuente
Respuestas:
Renombrar / mover archivos con sufijos rápidamente:
cp /home/foo/realllylongname.cpp{,-old}
Esto se expande a:
cp /home/foo/realllylongname.cpp /home/foo/realllylongname.cpp-old
fuente
Es el equivalente de la línea de comandos del botón Atrás (lo lleva al directorio anterior en el que estaba).
fuente
pushd
ypopd
mantener una pila de directorios, yo mismo.man cd
o,cd --help
(al menos el mío).Otro favorito:
Repite tu último comando. Más útil en la forma:
fuente
mkdir testdir; cd !$
.. Esto se ejecutacd [last word of previous line]
(en el ejemplocd testdir
)Mi favorito es '^ string ^ string2' que toma el último comando, reemplaza string por string2 y lo ejecuta
Guía de historial de línea de comando Bash
fuente
!!:gs/ehco/echo/
!!:gs/ehco/echo/
realiza una búsqueda global y reemplaza el último comando (consultar!!
en stackoverflow.com/questions/68372/… ). Eso no es equivalente a lo^ehco^echo
que simplemente reemplaza una instancia de "ehco", sería una respuesta más precisa!!:s/ehco/scho
.rebautizar
Ejemplo:
Tan útil
fuente
Soy un fan de los
!$
,!^
y!*
expandos, volviendo, desde la línea de comando más reciente presentado: el último elemento, el primer elemento no mando, y todos los elementos de mando no. A saber (tenga en cuenta que el shell imprime el comando primero):Esto es muy útil cuando, por ejemplo
ls filea fileb
, y desea editar uno de ellos:vi !$
o los dos de ellos:vimdiff !*
. También se puede generalizar al "n
argumento th" así:Finalmente, con los nombres de ruta, puede llegar a partes de la ruta agregando
:h
y:t
a cualquiera de los expandos anteriores:fuente
Al ejecutar comandos, a veces querré ejecutar un comando con los argumentos anteriores. Para hacer eso, puede usar este acceso directo:
Ocasionalmente, en lugar de usar find, romperé un bucle de una línea si necesito ejecutar un montón de comandos en una lista de archivos.
Configurar las opciones del historial de la línea de comandos en mi .bash_login (o .bashrc) es realmente útil. El siguiente es un cuadro de configuraciones que uso en mi Macbook Pro.
Establecer lo siguiente hace que bash borre comandos duplicados en su historial:
También aumento el tamaño de mi historial bastante alto también. Por qué no? No parece ralentizar nada en los microprocesadores de hoy.
Otra cosa que hago es ignorar algunos comandos de mi historial. No es necesario recordar el comando de salida.
Definitivamente desea establecer histappend. De lo contrario, bash sobrescribe su historial cuando salga.
Otra opción que uso es cmdhist. Esto le permite guardar comandos de varias líneas en el historial como un solo comando.
Finalmente, en Mac OS X (si no está usando el modo vi), querrá restablecer <CTRL> -S para que no se detenga. Esto evita que bash pueda interpretarlo como búsqueda hacia adelante.
fuente
¿Cómo enumerar solo subdirectorios en el actual?
Es un truco simple, ¡pero no sabrías cuánto tiempo necesito para encontrarlo!
fuente
alias lsd='ls -F | grep --color /'
, que enumeraría lo mismo pero de una manera más floja. Sin embargo, enumeraría un directorio por línea, para facilitar el análisis. He modificado su comando para hacer lo mismo:ls -d1 */
ESC.
Inserta los últimos argumentos de su último comando bash. Es más útil de lo que piensas.
discos compactos ESC.
fuente
Claro, puede "
diff file1.txt file2.txt
", pero Bash admite la sustitución de procesos , lo que le permitediff
la salida de comandos.Por ejemplo, digamos que quiero asegurarme de que mi script me dé el resultado que espero. Simplemente puedo envolver mi script en <() y alimentarlo
diff
para obtener una prueba de unidad rápida y sucia:Como otro ejemplo, digamos que quiero verificar si dos servidores tienen instalada la misma lista de RPM. En lugar de enviar mensajes a cada servidor, escribir cada lista de RPM para separar los archivos y hacer una copia de
diff
esos archivos, puedo hacer lo mismodiff
desde mi estación de trabajo:Hay más ejemplos en la Guía avanzada de secuencias de comandos Bash en http://tldp.org/LDP/abs/html/process-sub.html .
fuente
Mi comando favorito es "ls-thor"
Invoca el poder de los dioses para enumerar los archivos modificados más recientemente en un formato convenientemente legible.
fuente
ls -bart -simpson -ruls
. S, ICNRls -lort
cuál es la palabra danesa para "mierda". Omitiendo cualquier grupo y no recibiendo la ira de Valhal :)Más novedad, pero es inteligente ...
Los 10 principales comandos utilizados:
Salida de muestra:
fuente
history | awk 'BEGIN {FS="[ \t]+|\\|"} {print $3}' | sort | uniq -c | sort -nr | head
^ R búsqueda inversa. Presione ^ R, escriba un fragmento de un comando anterior con el que desee hacer coincidir y presione ^ R hasta que encuentre el que desea. Entonces no tengo que recordar los comandos usados recientemente que todavía están en mi historial. No exclusivamente bash, sino también: ^ E para el final de la línea, ^ A para el comienzo de la línea, ^ U y ^ K para eliminar antes y después del cursor, respectivamente.
fuente
A menudo tengo alias para vi, ls, etc. pero a veces quieres escapar del alias. Simplemente agregue una barra diagonal inversa al comando en frente:
P.ej:
Genial, ¿no es así?
fuente
command
consulteSHELL BUILTIN COMMANDS
el manual de Bash.Aquí hay un par de ajustes de configuración:
~/.inputrc
:Esto funciona igual que
^R
pero usando las teclas de flecha en su lugar. Esto significa que puedo escribir (por ejemplo) ycd /media/
luego presionar la flecha hacia arriba para ir a lo último que quierocd
dentro de la/media/
carpeta.(Yo uso Gnome Terminal, es posible que deba cambiar los códigos de escape para otros emuladores de terminal).
La finalización de Bash también es increíblemente útil, pero es una adición mucho más sutil. En
~/.bashrc
:Esto permitirá por programa para rellenar la ficha (por ejemplo, el intento del tabulador cuando la línea de comandos se inicia con
evince
sólo mostrará los archivos que evince puede abrir, y que también opciones de línea de comandos de la ficha completa).Funciona muy bien con esto también en
~/.inputrc
:fuente
Yo uso mucho lo siguiente:
El
:p
modificador para imprimir un resultado del historial. P.ejImprimirá el último comando para que pueda verificar que es correcto antes de ejecutarlo nuevamente. Simplemente ingrese
!!
para ejecutarlo.En un sentido similar:
Buscará en su historial el comando más reciente que contenga la cadena 'foo' e lo imprimirá.
Si no necesita imprimir,
realiza la búsqueda y la ejecuta de inmediato.
fuente
bind Space:magic-space # !pin<space>
Tengo un arma secreta: shell-fu.
Hay miles de consejos inteligentes, trucos geniales y recetas eficientes que la mayoría de las veces encajan en una sola línea.
Uno que me encanta (pero hago trampa un poco ya que uso el hecho de que Python está instalado en la mayoría de los sistemas Unix ahora):
Ahora, cada vez que escriba "webshare", el directorio actual estará disponible a través del puerto 8000. Realmente agradable cuando desee compartir archivos con amigos en una red local sin clave usb o directorio remoto. La transmisión de videos y música también funcionará.
Y, por supuesto, la clásica bomba de horquilla que es completamente inútil pero muy divertida:
No intentes eso en un servidor de producción ...
fuente
python -m SimpleHTTPServer
(a menos que me falte algo elegante que hace el comando originalPuede usar el comando watch junto con otro comando para buscar cambios. Un ejemplo de esto fue cuando estaba probando mi enrutador, y quería obtener números actualizados sobre cosas como la relación señal / ruido, etc.
fuente
para encontrar todos los lugares donde PROG está disponible, generalmente en algún lugar en ~ / bin en lugar de en / usr / bin / PROG que podría haberse esperado.
fuente
PATH
, mostrará cada uno de ellos.Me gusta construir comandos con echo y canalizarlos al shell:
¿Por qué? Porque me permite ver lo que se va a hacer antes de hacerlo. De esa manera, si tengo un error horrible (como eliminar mi directorio de inicio), puedo detectarlo antes de que ocurra. Obviamente, esto es lo más importante para acciones destructivas o irrevocables.
fuente
$ find dir -name \\*~ -exec rm {} +
Cuando descargo un archivo grande, a menudo lo hago:
Y luego solo ctrl + c cuando haya terminado (o si
ls
devuelve un valor distinto de cero). Es similar alwatch
programa, pero utiliza el shell en su lugar, por lo que funciona en plataformas sinwatch
.Otra herramienta útil es netcat, o
nc
. Si lo haces:Luego puede configurar una impresora en otra computadora, pero en su lugar usar la dirección IP de la computadora que ejecuta netcat. Cuando se envía el trabajo de impresión, la computadora que ejecuta netcat lo recibe y lo descarga
printjob.prn
.fuente
wget
?watch ls -la <filename>
(use -n5 si no le gusta el valor predeterminado de 2 segundos).watch
no está disponible en todas las plataformas, como Solaris, Mac OS X, etc. @Porges, no estoy seguro de lo que quieres decir. ¿Puede wget también escuchar en un puerto?pushd
ypopd
casi siempre son útilesfuente
Una forma preferida de navegar cuando estoy usando varios directorios en lugares muy separados en una jerarquía de árbol es usar acf_func.sh (que se enumera a continuación). Una vez definido, puedes hacer
discos compactos --
para ver una lista de directorios recientes, con un menú numérico
cd -2
para ir al segundo directorio más reciente.
Muy fácil de usar, muy útil.
Aquí está el código:
fuente
Expande líneas complicadas antes de golpear el temido enter
$
echo !$ !-2^ *
Alt+ Ctrl+ e$
echo aword someotherword *
Ctrl+ _$
echo !$ !-2^ *
Ctrl+ x, *$
echo !$ !-2^ LOG Makefile bar.c foo.h
&C.
fuente
Enter
:)Siempre he sido parcial a:
También lo uso
shopt -s cdable_vars
, luego puedes crear variables bash en directorios comunes. Entonces, para el árbol fuente de mi empresa, creo un montón de variables como:entonces puedo cambiar a ese directorio por
cd Dcentmain
.fuente
screen
por defecto. Lo reasigno a ctrl-X en mi.screenrc
, pero luego no soy un usuario de emacs.pbcopy
Esto se copia en el portapapeles del sistema Mac. Puede canalizar comandos a él ... intente:
pwd | pbcopy
fuente
alias pbcopy='xsel --clipboard --input'
yalias pbpaste='xsel --clipboard --output'
fuente
history 10
lugar dehistory | tail -10
(que debería sertail -n 10
por cierto ya que esa sintaxis está en desuso).El uso de 'set -o vi' desde la línea de comandos, o mejor, en .bashrc, lo pone en modo de edición vi en la línea de comandos. Comienza en el modo 'insertar' para poder escribir y retroceder de forma normal, pero si comete un error 'grande' puede presionar la tecla esc y luego usar 'b' y 'f' para moverse como lo hace en vi. cw para cambiar una palabra. Particularmente útil después de abrir un comando de historial que desea cambiar.
fuente
Similar a muchos anteriores, mi favorito actual es la pulsación de tecla [alt]. (Alt y "." Teclas juntas) esto es lo mismo que $! (Inserta el último argumento del comando anterior) excepto que es inmediato y para mí más fácil de escribir. (Simplemente no se puede usar en scripts)
p.ej:
fuente
Encadena múltiples comandos juntos usando el comando && :
o
fuente