Articulo de referencia

pez (shell de Unix)

{{cite web |title=fish shell team members |url=https://github.com/orgs/fish-shell/people |access-date=10 November 2025 |publisher=GitHub.com}} "},"released":{"wt":"{{release dat...

fish ( friendly interactive shell ; estilizado en minúsculas) es un intérprete de comandos tipo Unix centrado en la interactividad y la usabilidad. fish está diseñado para ser rico en funciones por defecto, en lugar de altamente configurable, [ 8 ] y no se adhiere a los estándares de intérpretes de comandos POSIX por diseño. [ 9 ]

Características

fish muestra sugerencias incrementales a medida que el usuario escribe, basándose en el historial de comandos y el directorio actual. Esto funciona de forma similar a la búsqueda de historial de Bash , pero siempre está activa, proporcionando al usuario retroalimentación continua mientras escribe comandos. fish también incluye autocompletado de tabulación con muchas funciones , con soporte para expandir rutas de archivo (con comodines y expansión de llaves ), variables de entorno y autocompletado específico de comandos. El autocompletado específico de comandos, incluidas las opciones con descripciones, puede generarse hasta cierto punto a partir de las páginas man de los comandos , pero también se pueden incluir autocompletados personalizados con software o escribirlos los usuarios del intérprete de comandos. [ 10 ]CtrlR

El creador de fish prefirió añadir nuevas funciones como comandos en lugar de sintaxis. Esto facilitó el descubrimiento de las funciones , ya que las funciones integradas permiten buscar comandos con opciones y textos de ayuda. Las funciones también pueden incluir descripciones legibles para el usuario. Un comando de ayuda especial permite acceder a toda la documentación de fish en el navegador web del usuario . [ 11 ]

Sintaxis

La sintaxis se asemeja a la de un intérprete de comandos compatible con POSIX (como Bash), pero difiere en muchos aspectos [ 12 ].

# Asignación de variables # # Asigna el valor 'bar' a la variable 'foo'. # fish no utiliza el operador =, que es inherentemente sensible a los espacios en blanco. # El comando 'set' se extiende para trabajar con matrices, ámbitos, etc.> establecer barra foo > echo $foo bar # Sustitución de comandos # # Asigna la salida del comando 'pwd' a la variable 'wd'. # fish no usa comillas invertidas (``), que no se pueden anidar y pueden confundirse con comillas simples (' ').> establecer wd ( pwd ) > establecer wd $( pwd ) # desde la versión 3.4 > echo $wd ~ # Variables de matriz. 'A' se convierte en una matriz con 5 valores: > set A 3 5 7 9 12 # Segmentación de matriz. 'B' se convierte en los dos primeros elementos de 'A': > set B $A [ 1 2 ] > echo $B 3 5 # Puedes indexar con otras matrices e incluso usar el comando # salida de sustitución: > echo $A [( seq 3 )] 3 5 7 # Borra el tercer y quinto elemento de 'A' > set --erase A [ $B ] > echo $A 3 5 9 # bucle for, convertir jpegs a pngs > for i in *.jpg convertir $i ( nombre base $i .jpg ) .png fin# fish admite historial y edición de varias líneas. # Los puntos y comas funcionan como saltos de línea: > for i in *.jpg ; convert $i ( basename $i .jpg ) .png ; end# Bucle while, lee las líneas de /etc/passwd y muestra el quinto # campo separado por dos puntos del archivo. Este debería ser # la descripción del usuario. > while read line set arr ( echo $line | tr : \n ) echo $arr [ 5 ] end < /etc/passwd # Reemplazo de cadena (reemplazar todas las i por I) > string replace -a "i" "I" "Wikipedia" Wikipedia 

No hay subcapa implícita

Algunas construcciones del lenguaje, como las tuberías , las funciones y los bucles , se han implementado mediante subprocesos en otros lenguajes de shell . Los subprocesos son programas secundarios que ejecutan algunos comandos para realizar una tarea y luego regresan al shell principal. Este detalle de implementación suele tener como efecto secundario que cualquier cambio de estado realizado en el subproceso, como la asignación de variables, no se propaga al shell principal. Fish nunca crea subprocesos para las características del lenguaje; todas las funciones integradas se ejecutan dentro del shell principal.

# Esto no funcionará en muchos otros shells, ya que el comando integrado '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

Este ejemplo de Bash no hace lo que parece: debido a que el cuerpo del bucle es un subproceso, la actualización $foundno es persistente.

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

Solución alternativa:

encontrado = '' mientras lee dev mnt rest ; hacer si prueba " $mnt " = "/" ; entonces encontrado = " $dev " fi hecho < /etc/fstab 

Ejemplo de pez:

establecer encontrado '' cat /etc/fstab | mientras lee dev mnt rest if test " $mnt " = "/" establecer encontrado $dev fin fin

Variables universales

Fish cuenta con una función conocida como variables universales, que permite al usuario asignar permanentemente un valor a una variable en todas las instancias de Fish que esté ejecutando. El valor de la variable se conserva incluso después de cerrar sesión o reiniciar el sistema, y ​​las actualizaciones se propagan inmediatamente a todas las instancias en ejecución.

# Esto convertirá a emacs en el editor de texto predeterminado. El parámetro '--universal' (o '-U') le indica a fish que # haga de esto una variable universal. > set --universal EDITOR emacs # Este comando hará que el directorio de trabajo actual que forma parte del indicador de fish se vuelva azul en todas las instancias de fish en ejecución. > set --universal fish_color_cwd blue 

Otras características

Tabla de traducción Bash/fish

Véase también

Referencias

  1. "miembros del equipo fish shell" . GitHub.com . Consultado el 10 de noviembre de 2025 .
  2. "Versión 4.8.1" . 13 de julio de 2026. Consultado el 14 de julio de 2026 .
  3. "fish-shell 4.0b1, ahora en Rust" . fishshell.com . 17 de diciembre de 2024. Consultado el 18 de diciembre de 2024 .
  4. "fish 4.0.0 (lanzado el 27 de febrero de 2025)" . fishshell.com . Consultado el 16 de agosto de 2025 .
  5. "fish-shell/fish-shell: Commits del 07-04-2005 al 31-12-2006" . GitHub . Consultado el 7 de mayo de 2026 .
  6. "Fish Shell Rust Port" . fishshell.com . 24 de abril de 2023. Consultado el 7 de mayo de 2026 .
  7. "Licencia" . fishshell.com . Consultado el 10 de noviembre de 2025 .
  8. Liljencrantz, Axel (17 de mayo de 2005). "Fish: un intérprete de comandos fácil de usar" . Linux Weekly News . Consultado el 24 de marzo de 2010 .
  9. "Documentación sobre peces: diseño" . fishshell.com . Consultado el 9 de abril de 2021 .
  10. "Escribir tus propios finales" . fishshell.com . Archivado del original el 31 de agosto de 2024. Consultado el 10 de noviembre de 2025 .
  11. "Magia de la CLI: Mejorando la consola con fish" . Linux.com . 13 de noviembre de 2006. Consultado el 10 de noviembre de 2025 .
  12. Paul, Ryan (19 de diciembre de 2005). "Una mirada profunda a fish: el shell interactivo amigable" . Ars Technica . Recuperado el 10 de marzo de 2015. La sintaxis POSIX tiene varias características faltantes o mal implementadas, incluyendo el alcance de las variables, los arreglos y las funciones. Por esta razón, fish se desvía de la sintaxis POSIX en varios lugares importantes.
  13. "fish_config – inicia la interfaz de configuración basada en web" . fishshell.com . Consultado el 10 de noviembre de 2025 .
  14. "Errores comunes en Bash" . mywiki.wooledge.org . Consultado el 10 de julio de 2016. Esta página muestra errores comunes que cometen los programadores de Bash. (...) ¡Te ahorrarás muchos de estos problemas si simplemente usas siempre comillas y nunca usas la división de palabras por ningún motivo! La división de palabras es una característica defectuosa heredada del shell Bourne que se mantiene activada por defecto si no se usan comillas para las expansiones. La gran mayoría de los problemas están relacionados de alguna manera con las expansiones sin comillas y la consiguiente división de palabras y el globbing resultante.
  15. dag (16 de mayo de 2013). "RFC: Agregar enlace para expandir/evaluar tokens en la línea de comandos" . GitHub . Recuperado el 9 de abril de 2021 .
  16. Nordal, Andreas (11 de julio de 2013). "printf no admite \e" . Problemas con fish . Recuperado el 24 de marzo de 2016 .
  • Sitio web oficial : contiene documentación y descargas.Edita esto en Wikidata
  • fish-shell en GitHub (activo)
  • "pez" . Gitorious . Archivado del original el 26 de julio de 2011.(obsoleto)
  • peces / peces en SourceForge (obsoleto)
  • fish-users – lista de discusión general para usuarios de fish
  • Diccionario de traducción de shell : otra tabla de traducción de Bash/fish