¿Puedo ponerle un alias a la cadena vacía?

¿Puedo ponerle un alias a la cadena vacía?

En bash, ¿puedes asignar un alias a un comando nulo para algo? En otras palabras, ¿reconoce que el usuario ha presionado solo la Entertecla en el símbolo del shell? Por ejemplo, si desea borrar la pantalla con una entrada de shell en blanco, ¿cómo le asigna un alias Enteral clearcomando?

Respuesta1

Aquí se explica cómo asignar (efectivamente) un alias a un comando vacío para algo:

Pon lo siguiente en tu .bashrc:

command1()
{
    if [ "$BASH_COMMAND" != command2 ]
    then
        command_flag=1
    fi
    return 0
}
trap command1 debug
command2()
{
    if [ ! "$command_flag" ]
    then
        echo "clear"                            # Put whatever command(s) you want here.
    fi
    command_flag=
}
PROMPT_COMMAND=command2

Si es necesario, reemplace command1y command2consistentemente con palabras que es menos probable que escriba al azar.

  • trap command1 debughará que la command1función se ejecute cada vez que usted (el usuario) escriba un comando.
    • Si el comando más reciente a ejecutar no lo fue command2, command1se establecerá command_flag.
  • La asignación command2a PROMPT_COMMAND hará command2que se ejecute siempre que el shell esté a punto de emitir un mensaje.
    • Si command_flagno tiene un valor en blanco, significa que command1se acaba de ejecutar, lo que significa que el usuario acaba de ejecutar un comando. En este caso, no hagas nada.
    • si command_flaglo hacenotiene un valor que no está en blanco, eso significa que el usuario acaba de presionar Enter. En este caso, haga lo que quiera (por ejemplo, borrar la pantalla).
    • En cualquier caso, déjelo command_flagen blanco para que todo funcione en el siguiente ciclo.

Nota: Estoy bastante seguro de que esto es específico de bash (es decir, no es compatible con POSIX).

Esta respuesta fue básicamente copiada de mi respuesta aAgregar espacio vertical después del comando en bash. Ver tambiéndecir si el último comando estaba vacío en PROMPT_COMMAND para otros enfoques.

Respuesta2

TL;DR: Ctrl-lborrará la pantalla sin imprimir un carácter ni presionar enter. Esto es probablemente lo más cerca que estará de la funcionalidad deseada. Puede ejecutar un comando antes o después de cada comando, o puede crear un alias para un solo carácter. No se puede asignar un alias a la cadena vacía.

Los alias no están necesariamente diseñados para incluir todo el contenido en una línea.

alias ll='ls -l'

es un buen ejemplo de esto. Puedes hacerlo ll /path/to/other/diry obtener resultados.

Todo lo que hace un alias es literalmente cambiar la(s) primera(s) palabra(s) escrita(s) en la línea de comando al valor que usted le dio.

El único requisito para que un alias funcione es que debe ir seguido de un carácter no imprimible (espacio/tabulación/nueva línea). En nuestro caso, llpor sí solo es válido, pero ll-/mypath/no lo es, porque es posible (y se hace con frecuencia) asignar alias a algunos caracteres que pueden ser el inicio de otro comando (es decir, alias gi='git init'solo se puede resolver exactamente gi, no git, que es lo que la mayoría la gente quiere y espera).

No es posible asignar un alias a algo en la cadena vacía, ya que estaría al comienzo decadaentrada de línea de comando.

Si desea que se ejecute un comando cada vez, puede usarlo PS0(asumiendo una versión suficientemente reciente de bash) para ejecutar algo antes de cada comando o PROMPT_COMMANDpara ejecutar algo después de cada comando. Por ejemplo:

PROMPT_COMMAND='echo $?'

haría eco del valor de retorno del comando que ejecutó después de cada comando que ejecute.

Bash no tiene una buena forma de completar una acción si y sólo si has ingresado una línea vacía en la línea de comando. Bash no es sensible a los espacios en blanco de esta manera.

información relacionada