¿Diferencias entre fish y bash para pasar argumentos de línea de comando a funciones de alias?

De las respuestas a mi otra pregunta aquí, aprendí sobre la posibilidad de pasar argumentos de línea de comandos a una función de alias en Bash.

En Fish puedo editar un alias editando el archivo config.fish en el directorio ~/.config/fish y agregando una línea como esta

 alias lsp='ls -ah --color=always | less -R;' 

y funciona perfectamente. Esto debería ser el equivalente a editar ~/.bash_aliases en bash

Pero cuando bash configurar una función de alias para pasar argumentos como este

 alias lsp='_(){ ls -ah --color=always $* | less -R; }; _' 

¿No funciona para peces?

¿Hay alguna diferencia entre fish y bash en la forma de configurar un alias para pasar los argumentos de la línea de comandos que impiden que este segundo alias trabaje con fish en lugar de bash?

Este segundo comando es en realidad un pequeño bash-script. Bash es el lenguaje de progtwigción integrado en el shell. Es usado por otras conchas, pero no necesariamente, como vemos aquí.

Fish define un lenguaje de progtwigción completamente diferente para bash , aunque admite alias simples en la forma habitual de alias name=command ; Deberías definir una función en su lugar. Así es como definirías la función anterior en peces:

 stefano@lenovo ~> function lsp ls -ah --color=always $argv | less -R end 

y funcsave lsp así que funcsave lsp permanentemente.

Ahora puede ejecutar los comandos esperados, como lsp , lsp -R , lsp *.png* y así sucesivamente.

También puede ‘invocar’ bash para ejecutar un script por usted, usando el progtwig ‘sh’ (esto ejecutará ‘dash’ para ser más precisos). Pero si está utilizando peces, es probable que desee utilizar los métodos que proporciona. Acabo de probarlo por primera vez, y hasta ahora estoy muy impresionado.

Las funciones se almacenan como un archivo en .config/fish/functions/ en su directorio de inicio. El nombre del archivo será, en este ejemplo, lsp.fish . Puede editar el archivo, reiniciar el pescado después, o simplemente definir y guardar la función nuevamente.

La mejor manera de aprender peces es leyendo su ayuda integrada. Desde dentro del pez, solo teclea

 help 

y obtendrás un manual muy bien formateado, extenso y fácil de leer. En realidad, esto abre el navegador web w3m , porque la ayuda está en formato html:

texto alternativo

(presione qy para salir)

Nunca he visto un artilugio como este antes.

 alias lsp='_(){ ls -ah --color=always $* | less -R; }; _' 

Un alias que declara una función y la ejecuta. Deberías hacer una función en primer lugar. En bash, las funciones reemplazan a los alias en casi todos los aspectos.

 lsp() { ls -ah --color=always "$@" | less -R; } 

Pon eso en tu archivo ~/.bashrc , o si prefieres poner las funciones en un archivo separado, como ~/.bash_functions , puedes hacerlo, pero debes source ese archivo desde ~/.bashrc