Me gustaría crear un alias en zsh que ejecute mi último comando de terminal comenzando con node
. Puedo ejecutar ese comando con !?node
, pero no puedo crear un alias con alias N='!?node'
. ¿Cómo puedo hacer este alias?
Respuesta1
La expansión del historial se realiza en su línea de comandoantesexpansión de alias. Por lo tanto, poner una expansión del historial en un alias no funcionará porque, después de que se expande el alias, no se realiza más expansión del historial.
Por otro lado, la expansión de parámetros se realizadespuésexpansión de alias. Entonces, puedes usar esto en su lugar:
alias N='"${(z)history[(r)node *]}"'
(r)
obtiene la primera aparición del patrón después de él. En este caso, recuperará el elemento del historial coincidente más reciente, porque$history
siempre está ordenado del más nuevo al más antiguo.(z)
analiza la cadena como código y devuelve las palabras de shell resultantes. De lo contrario, toda la expansión se trata como una sola palabra.- Las
"
comillas dobles"
son necesarias para analizar el espacio correctamente. De lo contrario, se trataría como un separador de palabras, lo que provocaría un error de sintaxis. - Las
'
comillas simples'
son necesarias para evitar que la expansión del parámetro se realice inmediatamente después de la declaración.