Friendly interactive shell

De Wikipedia, la enciclopedia libre
Friendly interactive shell
Información general
Tipo de programa Shell de UNIX
Autor Axel Liljencrantz
Desarrollador Axel Liljencrantz
Modelo de desarrollo Abierto
Lanzamiento inicial 13 de febrero de 2005
Licencia GPLv2
Estado actual Activo
Idiomas inglés
Información técnica
Programado en
Plataformas admitidas multiplataforma
Versiones
Última versión estable 3.1.2 ( 29 de abril de 2020 (4 años y 4 días)[1]​)
Última versión en pruebas 3.1b126 de enero de 2020
Enlaces

Friendly interactive shell (abreviado como fish) es el nombre de una shell de Unix que pretende ser interactiva y amigable para el usuario, al contrario de otras shells. La meta de diseño de fish es dar al usuario un conjunto diverso de poderosas características de una manera fácil de descubrir, recordar y usar.[2]​ fish es considerado un "shell exótica", ya que su sintaxis no deriva ni de una «Bourne shell» (ksh, bash, zsh) ni de alguna «C shell» (csh, tcsh). También, al contrario de otras shells, que desabilitan algunas características para cuidar los recursos del sistema, fish habilita todas las características por defecto.

Otras características[editar]

La versión 2 añade:

  • Autosugerencias
  • 256 colores de terminal
  • Configuración basada en la web
  • Mejoras en el rendimiento (al disponer de más módulos integrados).

Sintaxis[editar]

La sintaxis se asemeja a un shell compatible con POSIX (como Bash), pero se desvía en aspectos importantes en los que los creadores creen que el shell POSIX estaba mal diseñado.[3]

No hay subshell implícito[editar]

Algunas construcciones del lenguaje, como pipelines, funciones y bucles, se han implementado utilizando las llamadas subshells en otros lenguajes shell. Las subshells son simplemente programas hijos que ejecutan algunos comandos para la shell y luego salen. Desafortunadamente, este detalle de implementación suele tener el efecto secundario de que cualquier cambio de estado realizado en la subshell, como la asignación de variables, no se propaga a la shell principal, lo que puede sorprender al usuario. Fish nunca bifurca los llamados subshells; todos los builtins son siempre completamente funcionales.

# Esto no funcionará en muchos otros shells, ya que el builtin 'read'
# se ejecutará en su propio subshell. En Bash, el lado derecho de la tubería
# no puede tener efectos secundarios. En ksh, el siguiente comando funciona, pero
# el lado izquierdo no puede tener efectos secundarios. En fish y zsh, ambos
# lados pueden tener efectos secundarios.
> cat *.txt | read line

Ejemplo de asignación de variables[editar]

Este ejemplo de Bash no hace lo que parece: como el cuerpo del bucle es un subshell, la actualización de $found no es persistente.

found=''
cat /etc/fstab | while read dev mnt rest; do
  if test "$mnt" = "/"; then
    found="$dev"
  fi
done

Solución:

found=''
while read dev mnt rest; do
  if test "$mnt" = "/"; then
    found="$dev"
  fi
done </etc/fstab

Fish no necesita una solución:

set found ''
cat /etc/fstab | while read dev mnt rest
  if test "$mnt" = "/"
    set found $dev
  end
end

Referencias[editar]

  1. fishshell.com Release Notes for fish 3.1.2
  2. Linux Weekly News. Fish - A user-friendly shell. Retrieved 2010-03-24.
  3. {cite web|last1=Paul|first1=Ryan|title=Una mirada en profundidad a fish: el shell interactivo amigable|url=https://arstechnica Archivado el 16 de julio de 2013 en Wayback Machine.. com/information-technology/2005/12/linux-20051218/2/|website=Ars Technica|access-date=10 de marzo de 2015|quote=la sintaxis de Posix tiene varias características que faltan o están mal implementadas, incluyendo el ámbito de las variables, las matrices y las funciones. Por esta razón, fish se aleja de la sintaxis Posix en varios lugares importantes.}}