Usando funciones en la shell Fish en #Linux

Veamos cómo crear nuestros propios comandos con las funciones en la shell Fish en nuestro sistema GNU/Linux

Fish es una de las shells disponibles y alternativas a Bash y es mi shell predeterminada desde hace mucho. Fish nos ofrece cosas como autocompletado, resaltado de sintaxis, sugerencias de comandos según escribimos, y mucho más.

Esto nos ahorra tiempo, y nos hace más amigable el uso de la terminal.

Las funciones, tanto en fish como en bash, son programas o scripts escritos en el lenguaje propio de la shell que agrupan varios comandos con sus argumentos y ejecutamos al llamarlas por un nombre.

Es como si escribiéramos nuestros propios comandos, usando varias instrucciones, que se ejecutarían al escribir el nombre de nuestro comando personalizado, que es el nombre de la función.

Verás que es más sencillo de lo que he explicado, que nos pueden ser muy útiles. Podemos crear por ejemplo un comando que nos sirva de calculadora en la terminal, podemos hacer una función que al crear una directorio entre directamente en él, etc.

Las funciones en fish las puedes encontrar y crear en ~/.config/fish/functions/ ahí es donde las puedes encontrar y donde poner las tuyas. Tienen un nombre y acaban en .fish

Tienen la siguiente sintaxis, vamos a ver un ejemplo sencillo de una función de fish. Esta función lo que hace es crear un directorio y después entrar en él:

function mkdir --description 'Crea un directorio y entra directamente a el' --argument directorio
    command mkdir $directorio
    if test $status = 0
        switch $argv[(count $directorio)]
            case '-*'

            case '*'
                cd $argv[(count $directorio)]
                return
        end
    end
end

Para crear una función podemos hacerlo mediante el editor de funciones de fish y después guardarla con un comando específico o podemos crear el archivo en la ruta que he especificado y después salir de la terminal y volver a entrar.

Vamos a utilizar el primer método. Para ello ejecutamos el comando, que nos abrirá el editor configurado en $EDITOR en nuestro sistema:

funced mkdir

Y el editor ya nos crea la primera y última línea de nuestra función, que comienza con function y el nombre que le queremos dar y será el que después ejecutaremos para llamarla y termina con end.

Podemos modificarla y crearla a nuestro gusto, por ejemplo en la función anterior de ejemplo hemos añadido una descripción de qué realiza y hemos nombrado el parámetro que le pasamos con un nombre, esto no es estrictamente necesario, pero es aconsejable.

Después escribiremos los comandos necesarios, usando la sintaxis de fish, para realizar la tarea que queremos. Cerramos el editor guardando el archivo, pero aún deberemos decirle a fish que tenga en cuenta esta nueva función, para esto ejecutamos:

funcsave mkdir

Ahora ya podremos utilizar la función mkdir, que nos creará un directorio y luego entrará en el, para ejecutar la función simplemente ejecutamos:

mkdir nombre_directorio

Otra función que puede resultar interesante (y que surgió gracias a una duda del compañero Krovikan en los foros oficiales de openSUSE) sería una que nos convirtiera un archivo de vídeo a otro en formato .mp4 usando ffmpeg

La función sería la siguiente:

function mp4 --description 'convierte un video de entrada a uno de salida en mp4' --argument vid_entrada vid_salida
    ffmpeg -i $vid_entrada -b:a 128k -c:a aac -c:v libx264 -framerate 29 -threads 2 $vid_salida
end

Llamaremos a la función pasándole el nombre del archivo existente que queremos convertir y el nombre del archivo de salida en mp4. Si el nombre tiene espacios en blanco deberemos escaparlos con una barra invertida.

Podemos hacer que nuestras funciones en fish se ejecuten cuando se den ciertos eventos en nuestro sistema, al arrancar fish, al salir, después de producirse un error, etc.

Después de esta introducción, lo mejor es leer la documentación oficial y empezar a crear nuestras propias funciones en fish para tareas repetitivas que ejecutemos o aquellas que impliquen varios pasos.

¿Alguna función útil que sea imprescindible para ti? Compártela en los comentarios del blog.

Enlaces de interés

2 comentarios sobre “Usando funciones en la shell Fish en #Linux

  1. Me alegra saber que te inspirara para una entrada en tu blog (y que me resolvieras la duda en el foro).

    Gracias de nuevo.

    1. Hola!
      Igual que te sirvió a tí y a mí para aprender cosas, igual le sirve a tu yo del futuro o a mi yo!! 🙂
      O a alguien con una pregunta similar.
      Es solo un acercamiento a las funciones, pero entre los ejemplos y tirando de documentación puede ser útil.

      Saludos!!

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.