Articulo de referencia

Pescado (shell de Unix)

Fish ( o shell interactivo amigable , estilizado en minúsculas) es un shell tipo Unix que se centra en la interactividad y la facilidad de uso. Fish está diseñado para ser rico ...

Fish ( o shell interactivo amigable , estilizado en minúsculas) es un shell tipo Unix que se centra en la interactividad y la facilidad de uso. Fish está diseñado para ser rico en funciones de manera predeterminada, en lugar de ser altamente configurable. [ 4] Fish se considera un shell exótico ya que no se adhiere a los estándares de shell POSIX , a discreción de sus mantenedores. [5]

Características

Fish muestra sugerencias incrementales a medida que el usuario escribe , en función del historial de comandos y del directorio actual. Esto funciona de manera similar a la búsqueda de historial de Bash , pero siempre está activa, lo que le da al usuario una retroalimentación continua mientras escribe comandos. Fish también incluye la función de autocompletado con tabulación , con soporte para expandir rutas de archivos (con comodines y expansión de llaves ), variables de entorno y autocompletados específicos de comandos. Los autocompletados específicos de comandos, incluidas las opciones con descripciones, se pueden generar hasta cierto punto a partir de las páginas man de los comandos , pero también se pueden incluir autocompletados personalizados con el software o escribirlos los usuarios del shell. [6]CtrlR

El creador de Fish prefirió agregar nuevas funciones como comandos en lugar de sintaxis. Esto hizo que las funciones fueran más fáciles de descubrir , ya que las funciones integradas permiten buscar comandos con opciones y textos de ayuda. Las funciones también pueden incluir descripciones legibles para humanos. Un comando de ayuda especial brinda acceso a toda la documentación de Fish en el navegador web del usuario . [7]

Sintaxis

La sintaxis se parece a una shell compatible con POSIX (como Bash), pero se desvía en muchos aspectos [8]

# Asignación de variable 
# 
# Establezca la variable 'foo' en el valor 'bar'. 
# Fish no utiliza el operador =, que es inherentemente sensible a los espacios en blanco. 
# El comando 'set' se extiende para trabajar con matrices, alcance, etc.

>  establecer barra foo
 >  echo  $foo
bar
 
# Sustitución de comando 
# 
# Asigna la salida del comando 'pwd' a la variable 'wd'. 
# Fish no utiliza 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 la matriz. 'B' se convierte en los dos primeros elementos de 'A': 
>  set B $A [ 1 2 ] 
>  echo  $B 
3 5
 # Puede indexar con otras matrices e incluso 
generar una sustitución de comando: 
>  echo  $A [( seq 3 )] 
3  5 7
 # Borrar el tercer y quinto elemento de 'A' 
>  set --erase A [ $B ] 
>  echo  $A 
3  5 9

# bucle for, convierte archivos jpeg a png 
>  for i en *.jpg
      convertir $i  ( nombre base $i .jpg ) .png
   fin

# fish admite la edición e historial de varias líneas. 
# Los puntos y coma funcionan como nuevas líneas: 
>  for i in *.jpg ; convert $i  ( basename $i .jpg ) .png ;  end



# bucle while, lee las líneas /etc/passwd y genera el quinto 
campo separado por dos puntos del archivo. Este debe 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 de lenguaje, como pipelines , funciones y bucles , se han implementado utilizando los llamados subshells en otros lenguajes de shell . Los subshells son programas secundarios que ejecutan algunos comandos para realizar una tarea y luego vuelven al shell principal. Este detalle de implementación generalmente tiene el efecto secundario de que cualquier cambio de estado realizado en el subshell, como asignaciones de variables, no se propaga al shell principal. Fish nunca crea subshells para las características del lenguaje; todas las funciones incorporadas ocurren dentro del shell principal.

# Esto no funcionará en muchos otros shells, ya que la instrucción incorporada 'read' 
# se ejecutará en su propio subshell. En Bash, el lado derecho de la tubería 
# no puede tener ningún efecto secundario. En ksh, el comando siguiente funciona, pero 
# el lado izquierdo no puede tener ningún efecto secundario. 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 subshell, la actualización $foundno es persistente.

encontrado = '' 
cat  /etc/fstab | mientras leer dev mnt resto ; hacer si prueba " $mnt " = "/" ; entonces encontrado = " $dev " fi hecho       
       
    
  

Solución alternativa:

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

Ejemplo de pez:

conjunto encontrado '' 
cat /etc/fstab |  mientras  leer dev mnt resto
   si  prueba  " $mnt "  =  "/" 
    conjunto encontrado $dev 
  fin 
fin

Variables universales

Fish tiene una característica conocida como variables universales, que permite a un usuario asignar permanentemente un valor a una variable en todos los shells de Fish en ejecución del usuario. El valor de la variable se recuerda después de cerrar sesión y reiniciar, y las actualizaciones se propagan inmediatamente a todos los shells en ejecución.

# Esto hará que emacs sea el editor de texto predeterminado. El '--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 fish se vuelva azul en todas las instancias de fish que se estén ejecutando. 
>  set --universal fish_color_cwd blue

Otras características

Tabla de traducción de bash/fish

Véase también

Referencias

  1. ^ "Miembros del equipo de Fish Shell". GitHub.com . Consultado el 28 de julio de 2021 .
  2. ^ "Versión 3.7.1". 19 de marzo de 2024. Consultado el 22 de marzo de 2024 .
  3. ^ fishshell.com Licencia para peces
  4. ^ Liljencrantz, Axel (17 de mayo de 2005). "Fish: un shell fácil de usar". Linux Weekly News . Consultado el 24 de marzo de 2010 .
  5. ^ "Documentos de pesca: diseño" . Consultado el 9 de abril de 2021 .
  6. ^ "Escribiendo tus propias terminaciones". fish shell . Archivado desde el original el 31 de agosto de 2024.
  7. ^ Linux.com. CLI Magic: Mejorar el shell con fish. Consultado el 24 de marzo de 2010.
  8. ^ Paul, Ryan (19 de diciembre de 2005). "Una mirada en profundidad a fish: el shell interactivo amigable". Ars Technica . Consultado el 10 de marzo de 2015. La sintaxis de Posix tiene varias características faltantes o mal implementadas, incluyendo el alcance de las variables, las matrices y las funciones. Por esta razón, fish se aleja de la sintaxis de Posix en varios lugares importantes.
  9. ^ "Bash Pitfalls" (Pérdidas de Bash) . Consultado el 10 de julio de 2016. Esta página muestra errores comunes que cometen los programadores de Bash. (…) ¡Te ahorrarás muchas de estas trampas si simplemente siempre usas comillas y nunca usas la división de palabras por ningún motivo! La división de palabras es una característica errónea heredada del shell Bourne que está bloqueada de forma predeterminada si no se citan las expansiones. La gran mayoría de las trampas están relacionadas de alguna manera con las expansiones sin comillas y la consiguiente división de palabras y la acumulación de palabras.
  10. ^ "RFC: Agregar enlace para expandir/evaluar tokens en la línea de comandos". GitHub . 2013-05-16 . Consultado el 2021-04-09 .
  11. ^ "printf no admite \e". Problemas con fish . 11 Jul 2013 . Consultado el 24 de marzo de 2016 .
  • Sitio web oficial – contiene documentación y descargas
  • pescado en GitHub (activo)
  • Pescado en Gitorious (obsoleto)
  • pescado en SourceForge (obsoleto)
  • Usuarios de pescado: lista de discusión general para usuarios de pescado
  • Diccionario de traducción de Shell: otra tabla de traducción de Bash/Fish
Retrieved from "https://en.wikipedia.org/w/index.php?title=Fish_(Unix_shell)&oldid=1243830347"