🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

Aprendiendo Operaciones Básicas Comparando Fish y Bash

En el desarrollo web, las operaciones en la línea de comandos en la "pantalla negra", o terminal (shell), son esenciales. Mucha gente probablemente usa el shell por defecto, "Bash", sin pensarlo mucho. Sin embargo, existen shells más avanzados que pueden mejorar drásticamente nuestro flujo de trabajo. El principal ejemplo, y el enfoque de este artículo, es "Fish (Friendly Interactive Shell)".

Este artículo proporciona una explicación detallada del uso básico y las atractivas características de Fish, comparándolo con el shell más popular, "Bash". Esperamos que este artículo sirva como un primer paso para que los creadores web hagan su vida diaria de codificación más cómoda. Todo el código está diseñado para funcionar perfectamente con solo copiar y pegar. ¡Exploremos el mundo de Fish acumulando pequeños éxitos de "¡Funcionó!"!

¿Cuál es la diferencia entre Fish y Bash? Conozcamos los conceptos básicos del shell

Primero, comprendamos brevemente las características de cada shell.

Para usar una analogía, si Bash es una "máquina veterana y fiable que requiere operación manual", entonces Fish es como un "asistente de IA inteligente que anticipa tus intenciones y te brinda apoyo". Ahora, veamos sus capacidades en acción.

【Práctica】¡Aquí está la diferencia! Una comparación exhaustiva de las operaciones básicas en Fish y Bash

A partir de aquí, experimentaremos las convenientes funciones de Fish comparando operaciones específicas. Si aún no has instalado Fish, instálalo según tu entorno.

Para macOS (Homebrew):

brew install fish

Para Ubuntu/Debian:

sudo apt-get update
sudo apt-get install fish

Después de la instalación, puedes iniciar el shell de Fish escribiendo `fish` en tu terminal.

1. ¡Diferente apariencia e información! Comparación de prompts

Lo primero que ves cuando inicias un shell es el "prompt", la parte a la izquierda donde escribes los comandos. Hay una gran diferencia entre Bash y Fish desde el principio.

Un prompt típico de Bash:
Muestra información como el nombre de usuario, el nombre de host y el directorio actual, pero es relativamente simple.

user@hostname:~/project$ 

El prompt por defecto de Fish:
Fish muestra claramente el nombre de usuario y la ruta del directorio actual. Especialmente útil es que cuando estás dentro de un repositorio de Git, muestra automáticamente el nombre de la rama. Para los creadores web, las operaciones de Git son una rutina diaria. Ver de un vistazo en qué rama estás trabajando es una gran ayuda para prevenir errores.

user@hostname ~/project (main)> 

2. ¡La mejor arma de Fish! Autosugerencias

La característica que convierte a Fish en un "shell de nivel dios" son sus autosugerencias. Esta función predice el comando que probablemente escribirás a continuación basándose en tu historial de comandos, mostrándolo en un color gris tenue.

Por ejemplo, supongamos que has escrito previamente el comando `git commit -m "Initial commit"`. La próxima vez, con solo escribir `git c`...

La autosugerencia de Fish:
Como puedes ver, el comando completo inferido de tu historial se muestra tenuemente después de la parte que has escrito. Si estás de acuerdo con la sugerencia, simplemente presiona (tecla de flecha derecha) o Ctrl + F para aceptar el comando completo. Ya no necesitas escribir comandos largos una y otra vez.

user@hostname ~/project (main)> git commit -m "Initial commit"

Bash también tiene una función de autocompletado, pero generalmente necesitas presionar la tecla Tab para ver los candidatos, lo que lo hace menos fluido e intuitivo que Fish. Esta experiencia por sí sola vale la pena para cambiarse a Fish.

3. ¡Reduce drásticamente los errores de tipeo! Resaltado de sintaxis

Fish te dice en tiempo real si el comando que estás escribiendo es "válido" codificándolo por colores. Esto se llama resaltado de sintaxis.

Para un comando válido (ej: `echo`):
Un comando válido que existe en el sistema se muestra en azul claro por defecto.

echo "Hello World"

Para un comando inexistente (ej: un error de tipeo como `ech`):
Si escribes mal un comando o introduces uno que no existe, se vuelve rojo al instante. Esto te permite darte cuenta de tu error antes de ejecutar el comando, previniendo errores innecesarios.

ech "Hello World"

Gracias a esta función, verás el familiar mensaje de error "command not found" mucho menos a menudo.

Avanzado: ¿En qué se diferencia la escritura de scripts?

El papel de un shell no se limita a las operaciones interactivas. Las diferentes filosofías de Fish y Bash también aparecen al escribir "scripts de shell" para automatizar una serie de procesos. La escritura de scripts en Fish está diseñada con una sintaxis más moderna y legible.

1. Definición de variables

En Bash:
Se escribe en el formato `NOMBRE_VARIABLE=valor`. Hay una regla única que no permite espacios alrededor del signo de igual.

MY_PROJECT="My Awesome Site"
echo $MY_PROJECT

En Fish:
Se usa el comando `set` para definir variables. Esto deja claro lo que estás haciendo, y como pasas el valor como argumento, no tienes que preocuparte por la presencia de espacios.

set MY_PROJECT "My Awesome Site"
echo $MY_PROJECT

2. Sentencias if (Bifurcación condicional)

En el desarrollo web, es común la bifurcación condicional como "si el archivo `package.json` existe, ejecuta `npm install`".

En Bash:
Es común una notación un tanto arcaica que usa `[` (el comando test) o `[[`. También se requieren palabras clave como `; then` y `fi`.

if [ -f "package.json" ]; then
  echo "¡package.json encontrado!"
fi

En Fish:
Se puede escribir de forma más intuitiva, como en otros lenguajes de programación. Escribes la expresión condicional directamente después de `if` y cierras el bloque con `end`. `then` y `;` son innecesarios, lo que hace que el código sea más limpio.

if test -f "package.json"
  echo "¡package.json encontrado!"
end

3. Bucles for (Iteración)

Los procesos iterativos, como realizar la misma operación en múltiples archivos, también se usan con frecuencia.

En Bash:
Se construye un bucle con una combinación de palabras clave como `for`, `in`, `do` y `done`.

for i in {1..3}; do
  echo "Conteo del bucle Bash: $i"
done

En Fish:
Similar a la sentencia `if`, también tiene una sintaxis simple donde `do` es innecesario y el bloque se cierra con `end`. La parte encerrada en `()` se llama "sustitución de comando", y trata la salida del comando como una lista.

for i in (seq 1 3)
  echo "Conteo del bucle Fish: $i"
end

Puntos a tener en cuenta al migrar a Fish

Aunque hemos mostrado el atractivo de Fish, hay algunos "puntos a tener en cuenta" al migrar. Comprenderlos te ayudará a comenzar tu vida con Fish sin problemas y sin confusiones.

1. Incompatibilidad de sintaxis con Bash

Como hemos visto, Fish prioriza la legibilidad de los scripts, por lo que no es totalmente compatible con Bash. Debes tener especial cuidado al copiar y pegar comandos de Bash que encuentres en línea.

Encadenamiento de comandos (`&&`, `||`)

En Bash, a menudo se usa `&&` para escribir un proceso en el que "si el comando anterior tiene éxito, ejecuta el siguiente comando".

# Crear un directorio y, si tiene éxito, moverse a él
mkdir my_dir && cd my_dir

En Fish, esto se expresa con la palabra clave más clara `and`. (Aunque las versiones recientes de Fish también pueden usar `&&`, la recomendación oficial es usar `and` o `;`)

# La forma de escribir en Fish
mkdir my_dir; and cd my_dir

Del mismo modo, el `||` de Bash (ejecuta el siguiente comando si el anterior falla) corresponde a `or` en Fish. Si encuentras que un comando de Bash no funciona, recuerda esta diferencia.

2. Cómo establecer variables de entorno

El método para establecer "variables de entorno", que se configuran al establecer rutas para herramientas, también es diferente.

En Bash (escrito en `~/.bash_profile`, etc.):
Se usa el comando `export` para establecer variables de entorno.

export NODE_ENV="development"

En Fish (escrito en `~/.config/fish/config.fish`):
Se usa el comando `set` con la bandera `-x` o `--export`. Esto asegura que la variable se pase no solo al shell actual sino también a sus procesos hijos.

set -x NODE_ENV "development"

En particular, al agregar una nueva ruta a la variable `PATH`, Fish usa una sintaxis un poco especial. Como `$PATH` se trata como una lista (array), puedes simplemente agregarle así:

# Agregar ~/.node_modules/bin al principio de PATH
set -x PATH ~/.node_modules/bin $PATH

No necesitas concatenarlo como una cadena con dos puntos `:` como en Bash, lo que permite una gestión de rutas más segura e intuitiva.

Conclusión: ¡Comencemos a usar Fish!

En este artículo, hemos explicado el uso básico y el atractivo del shell de próxima generación, "Fish", comparándolo con el shell estándar, Bash.

Resumen de los beneficios de Fish:

Por supuesto, Bash tiene las importantes ventajas de estar "disponible en todas partes" y tener una "gran cantidad de información". Sin embargo, ¿qué tal si eliges el más amigable y potente Fish como tu "compañero" para el trabajo diario de desarrollo? Especialmente para los creadores web principiantes que quieren acostumbrarse a la línea de comandos, Fish debería ser el mejor compañero de aprendizaje.

Las características presentadas en este artículo son solo una fracción del encanto de Fish. Como siguiente paso, intenta personalizarlo usando un gestor de plugins. Puedes hacer que se vea genial, agregar funciones aún más convenientes y construir tu propio entorno de terminal definitivo.

Al siguiente artículo: Guía para principiantes sobre la personalización de Fish con temas (Fisher, Oh My Fish)