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.
- Bash (Bourne Again SHell): Este es el shell "estándar de la industria", instalado por defecto en muchas distribuciones de Linux y versiones antiguas de macOS. Tiene una larga historia, y la mayoría de los ejemplos de línea de comandos que se encuentran en línea están escritos para Bash. Si bien su estabilidad y trayectoria son atractivas, algunas de sus características son un poco anticuadas.
- Fish (Friendly Interactive Shell): Como su nombre indica, fue desarrollado para ser un "shell interactivo y amigable". Su mayor ventaja son sus potentes funciones de autocompletado y resaltado de sintaxis, que funcionan desde el primer momento y son intuitivas incluso para principiantes. Es un shell inteligente que se adapta a los entornos de desarrollo modernos.
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:
- 🧠 Autosugerencias inteligentes: Acelera y agiliza drásticamente la entrada de comandos.
- 🎨 Resaltado de sintaxis: Detecta errores de tipeo en tiempo real, previniendo errores antes de que ocurran.
- 📖 Sintaxis de script legible: Palabras clave intuitivas y fáciles de entender como `set`, `and`, `or` y `end`.
- 🚀 Listo para usar desde el primer momento: Puedes beneficiarte de sus potentes funciones desde el día que lo instalas.
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)