miércoles, enero 30, 2019

fish shell: Notas

fish es un shell para sistemas operativos de tipo Unix: Un programa que se encarga de aceptar la entrada del usuario y ejecutar las órdenes que éste le da y que sirve de interfaz en modo texto con el sistema operativo. Al contrario que otros shell, este no deriva de la familia de Bourne Shell ni de la de C Shell, sino que implementa su propia sintaxis para hacer un intérprete de comando lo más sencillo y amigable que se pueda.

Este shell me lo descubrió un compi de trabajo. Me llamaba bastante la atención como usaba el resaltado de sintaxis para señalar cada parte de la línea de órdenes, como funciona el autocompletado de comandos y como recuerda éstos en función del contexto. Así que decidí probarlo unos días. Lo que no hice fue cambiar con chsh el shell por defecto de mi usaurio, sino decir al emulador de terminal que uso, iTerm2, que ejecutase fish en vez bash.

Al ser un programa de código abierto lo podemos compilar de las fuentes o usar uno de los paquetes precompilados para diferentes plataformas que existe: Diversas distribuciones de Linux, FreeBSD, macOS o Windows. En mi caso, puesto que uso macOS opté por la versión precompilada en formato pkg que se instalará en /usr/local/bin.

En estos meses que he usado fish, las ventajas que le veo son:

  • Un sistema de autocompletado de comandos y parámetros mucho más cómodo que el de bash.
  • El uso que realiza de la sintaxis de colores para distinguir los parámetros, el comando que se está ejecutando o el comando que ha fllado.
  • La posibilidad de ir completando por argumentos la línea de comandos.
  • En lo poco que lo he usado para hacer shell script, la ausencia de quotes o construcciones estrañas que nos encontramos en bash.

Por otra parte, su principal desventaja ees no ser parecido al Bourne Shell o al Csh, con lo cual entramos en el terreno de los shell exóticos: No lo usa tanta gente y hay menos recursos para poder aprender.

Mi idea es ir anotando en esta entrada las cosas que vaya usando de fish, así como poner traducciones de comandos que se utilizan en bash (derivado del Bourne Shell) a fish.

Algunos ejemplo de las capacidades coloreado de sintaxis en función de la parte del comando que se trate. Todo esto es configurable con temas que se pueden instalar y configurar a nuestro gusto.

> ~ ls -al /usr/local/bin/fish*
 ~/D/b/002 - icewinddale echo $PATH
~/D/b/002 - icewinddale echo (pwd)
> ~/D/b/002 - icewinddale open blog2.html
> ~/D/b/002 - icewinddale echo "Drizz

A partir de ahora, la entrada la voy a dividir en diferentes epígrafes donde voy a ir anotando lo que voy aprendiendo sobre este shell y como se compara con otros shells. Veréis esta entrada incompleta porque voy a ir escribiendo sus apartados conforme vaya leyendo y probando las cosas.

Ejecutando comandos

Lo primero que va a llamaros la atención cuando se ejecuta un comando es que el color de lo que estamos escribiendo va a cambiar. Si lo que escribimos no se corresponde con ningún comando que el sistema pueda ejecutar, veremos en rojo el comando. fish soporta tanto recomendaciones cuando empezamos a escribir comandos como autocompletado de los mismos cuando se pulsa la tecla TAB, como ocurre con otros shells. Podemos aceptar las sugerencias que nos ofrece fish pulsando → en nuestro teclado. En caso que queramos ir saltando de parámetro en parámetro usamos ALT + →

El autocompletado con la tecla TAB también funciona para las variables de entorno.

La redirección de entrada y salida se hace en fish así. La diferencia es que aquí se usa ^ para redirigir la salida estándar de error (en bashm, por ejemplo se usa 2>h;).

awk < file.in > file.out ^ file.err

Se puede concatenar comandos usando el punto y coma. El valor devuelto por los comandos se almacen a en la variable $status. En los shells compatibles con Bourne Shell la variable es $?.

$ echo "Hi!";echo $status
Hi!
0

Aparte del clásico uso de * y ? para hacer globing para seleccionar nombres de ficheros, fish tiene otra interesante opción que es **. Cuando se usa este patrón, fish bajará por el árbol de directorio buscando aquellos ficheros y directorios que coincidan con el patrón. Por ejemplo, el siguiente comando recorre el árbol de directorios desde la ruta actual e imprime los ficheros y directorios que terminen en .deb:

ls **.deb

Para ejecutar comandos y quedarnos con el resultados la construcción que utiliza fish es (), frente a las backstick `` de bash. Por ejemplo:

# En fish imprimirá la ruta actual
$ echo (pwd)
/home/ubuntu
# El equivalente al comando anterior en bash
$ echo `pwd`
/home/ubuntu
Una diferencia importante es que esta sustitución no funciona dentro de cadenas de texto delimitadas por comillas, así mientras que en bash se puede hacer:
# En bash
$ echo "La ruta es `pwd`."
La ruta es /home/ubuntu.
# En fish
$ echo "La ruta es "(pwd)"."
La ruta es /home/ubuntu.

Variables de entorno

Las variables en fish son listas. Eso se puede ver fácilmente con la siguiente secuencia de comandos:

$ echo $PATH
/home/ubuntu/bin /home/ubuntu/.local/bin /usr/local/sbin /usr/local/bin /usr/sbin /usr/bin /sbin /bin /usr/games /usr/local/games /snap/bin
$ echo $PATH[2]
/home/ubuntu/.local/bin
$ echo $PATH[-2]
/usr/local/games
$ echo echo $PATH[1-2]
/home/ubuntu/bin /usr/local/games

Si el índice es negativo, se empieza a contar desde el final, mientras que también se permiten rangos

set es la orden del shell que se usa para manejar las variables. Por ejemplo, si se quiere crear una variable que tenga la ruta actual del sistema. Si se usa sin parámetros, nos imprimirá todas las variables que hay en el sistema ordenadas por orden alfabético:

$ set
MD_DURATION 121
COLORFGBG '15;0'
COLORTERM truecolor
COLUMNS 87
...

Las variables pueden tener tres posibles alcances, aparte de poder ser exportadas - es decir, estár disponible para los subprocesos que se lance desde el shell o no -. Los posibles alcances de la variables son:

  • locales, se crean pasando el parámetro -l. La variable sólo es válida en el bloque actual de código.
  • globales, se crean usando el parámetro -g. El alcance será global: La variable estará disponible durante la ejecución del shell una vez que se ha declarado.
  • universal, se crean con el parámetro -U. Estarán disponibles en todos los procesos fish que esté ejecutando el usuario en ese momento.
Ejemplos:
# Este es un ejemplo de local. Puede verse como el valor no se ve fuera del bloque
$ echo "Start";begin set -l VPATH (pwd);echo $VPATH; end;echo "VALUE:$VPATH"
Start
/Users/terron
VALUE:
# Este es global. Ahora si veremos el valor
$ echo "Start";begin set -g VPATH (pwd);echo $VPATH; end;echo "VALUE:$VPATH"
Start
/Users/terron
VALUE:/Users/terron
# Por último -U la crearía universal, estaría disponible en todos los shells
set -U VPATH (pwd)

Para exportar una variable y hacerla disponible a los subprocesos que se están ejecutando, se utiliza el parámetro -x. Para borrar una variable del entorno se utiliza -e:

# Este comandio ejecuta bash y hace que muestre las variables
# de entorno. Podemos ver la que hemos exportado, VPATH
$ set -gx VPATH (pwd) ;/bin/bash -c export|grep VPATH
declare -x VPATH="/home/drizzt"
# Para borrar
set -gx VPATH (pwd)
echo $PATH
/home/ubuntu
set -e VPATH
echo $VPATH

martes, enero 22, 2019

Una escapada a Montreaux, Suiza

Montreaux es una comuna suiza situada a los pies de los Alpes Suizos en la orilla del lago Lemán. La ciudad organiza diversas actividades navideñas entre finales del mes de novimebre y el día de Navidad:

El mercadillo navideño

El mercadillo navideño. A lo largo de la ribera del lago Lemán, se organiza un gran mercadillo donde puede adquirirse todo tipo de productos de artesanía o disfrutar de un buen vaso de vino caliente.

La casa de Papá Noel

A una hora en tren de cremallera, a 2042 metros de altitud, se encuentra la estación de esquí de Rochers de Naye. Desde el interior parte un túnel que nos llevará a la casa de Papá Noël, visita que hará las delicias de los más pequeños. En el exterior se puede disfrutar de las pistas de esquí o de excursiones de montaña.

Navidades en el Castillon de Chillón

En el Castillo de Chillón está en la comuna Veytaux, a orillas del lago Lemán y un poco antes de llegar a Montreaux. Los primeros restos del castillo datan del siglo X, siendo construido su mayor parte en el siglo XIII. En época navideña se celebra en el castillo diversas actividades, como danzas mediavales, talleres de alfarería o comida cocinada. El resto del año se realizan diversos talleres de interés.

Espectáculo de luces

En el periodo navideño se proyecta sobre la fachada del Montraux Palace un espectáculo de luces del que se peude disfrutar desde el paseo en la orilla del lago.

Nuestra excursión

Lo primero que hay que tener en cuenta si se quiere subir a la Casa de Papá Noel (Maison duy Pere Noel), es conseguir las entradas y confirmarlas. Los fines de semana suelen estar lleno y como mucho, queda a última hora. Tened en cuenta que la bajada desde Rochers de Nave sólo puede hacerse en tren, con lo cual es conveniente que llevéis los horarios. La visita a lo que es la case se hace en menos de una hora, pero si luego, queréis salir a la parte exterior de la estación de esquí y disfrutar de la zona, id con tiempo. Por otra parte, siempre está el riesgo de que haya ventisca y el tren de cremallera no pueda subir a Rochers de Nave . Todo esto hay que tenerlo en cuenta para planificar el viaje.

Una vez que tuvimos plaza confirmada para subir a la casa de Papá Noel, organizamos el viaje. Decidimos volar a Ginebra con EasyJet y allí coger un coche de alquiler. Dado la premura del viaje, encontrar alojamiento asequible en Montraux era más bien complicado, al final conseguimos en la zona francesa del Lago Lemán, en Chens-sur-Léman, a unos 25 km del aeropuerto de Ginebra y a unos 70 km de la ciudad de Montreaux.

Salimos el jueves por la noche hacia Ginebra, con algo de retraso. Aproximandamente la duración del vuelo es de una hora y tres cuartos. Lo primero que nos llamó la atención es que el aeropuerto de Ginebra da a Francia y Suiza. En función de la salida que tomes, vas hacia un país u otro. Y eso hay que tenerlo en cuenta cuando vas hacia la zona de alquiler de coches. Aunque nosotros llevábamos el coche alquilado con Europcar en el mismo paquete que el vuelo, y era en la zona Suiza, también se puede salir a la zona francesa, llevando un coche con matricula de Francia: Pero si pasas a Suiza y circulas por las autopistas, si no llevas la viñeta te puede costar una multa de 200 francos suizos. Como nosotros llevamos el coche alquilado en Suiza, teníamos la viñeta puesta. Y ojo, lo controlan con cámaras.

Una vez que tuvimos el coche, pusimos rumbo a nuestro alojamiento en Chens-sur-Léman - menos mal que el coche tenía GPS - , y a pesar de estar a sólo 25 km, tardamos casi 40 minutos en llegar. Puesto que había consultado en Google Maps las distancias y el tiempo estimado, me preocupó un poco que para hacer sólo los 70 km que nos separaba de Montreaux se tardara casi una hora y cuarto, así que nos fuimos directos a la cama ya que teniamos el tren para subir a Rochers de Naye a las 10 de la mañana.

A la mañana siguiente nos levantamos tempranos y pusimos rumbo a Montreaux. La carretera D1005 nos llevará bordeando el Lago Lemán hasta la frontera suiza. Atraviesa bastantes zonas urbanas, tiene bastantes curvas y en general la velocidad está limitada a 90 km/h. Atravesamos las frontera de nuevo en Saint-Gingolph, continunado por la carretera 21 y posteriormente en H144 hasta llegar a Montreaux.

Una vez llegamos, buscamos aparcamiento rápidamente ya qu el tren de cremallera que nos llevaría a la casa de Papa Noel saldria pronto. Decir que aparcar en Montreaux no es sencillo, especialmente en los fines de semana tan concurridos del mercadillo navideño y las subidas a Rochers de Naye. Además, la mayoría del la ciudad es zona azul dónde sólo se puede dejar el coche dos horas. No vayáis justo de tiempo y tened localizado los parkings para dejar el coche. Otra opción que se puede considerar es moverse en tren, ya depende de como organicéis el viaje, pero por ejemplo exiete Swiss Travel Pass, un billete que permite usar la red de Swiss Travel sin restricciones.

Tras desayunar en la estación - muy caro, como toda Suiza -, nos montamos en el antiguo tren de cremallera que nos llevaría hasta Rochers de Naye: El tren es estrecho y un poco incómodo, pero la experiencia merece la pena: Cuando empieza a subir por la montaña, se divisa la ciudad de Montreaux y el lago Lemán. Conforme ascendemos la nieve comienza a cubrirlo todo y el paisaje es espectacular. Sólo por disfrutar de las vistas de los paisajes merece la pena.

Tras una hora de viaje llegamo a la estación término del tren, situada en Rochers de Naye, a unos 2000 metros de altitud para visitar la casa de papá Noel. Nos bajamos del tren y tras enseñar las entradas, pasamos por un túnel decorado que acaba en la casa de papa Noel: Los niños disfrutan un montón entregando las cartas y haciéndose fotos con papá Noel. Comentar que puede ocurrir que el trayecto en tren se cancele dependiendo de las condiciones meteorológicas.

Después de la visita, salimos al exterior de la estación de esquí. Lucía un tímido sol que nos permitió disfrutar un buen rato jugando con la nieve. Eso si, un frío que pelaba. Aunque hay un restaurante en la estación de esquí, decidimos coger de nuevo el tren para volver a Montreaux y visitar el mercadillo de navidad.

Después de comer, bajamos hasta el paseo al lado del lago Lemán donde está instalado el famoso mercadillo de Navidad de Montreaux. Más de doscientos puestos de artesanía, adornos de navidad, belenes o comida, en pequeñas cabañas de madera. Un buen vin chaud ayudaba a los visitantes a combartir el frío y disfrutar de las vistas del atardecer sobre el lago Lemán

Siendo viernes por la tarde, el mercadillo estaba abarrotado de gente. Estuvimos un buen rato visitando los puestos y llegamos hasta la zona del paseo donde se encuentra una estatua dedicada a Freddiee Mercury, el genial vocalista de Queen. Desconocía que había fallecido en Montreaux.

Tras caer la noche, y ya con bastante frío, volvimos de nuevo a la casa donde nos habíamos quedado en Francia, no sin antes pararnos en un supermercado del lado francés a comprar comida para el siguiente día y cenar. Los precios suizos son elevados y teníendo la casa donde nos quedamos cocina, la aprovechamos.

Me llamó la atención mientras conducía de vuelta la cantidad de iluminación navideña que tenían los pueblos que atravesamos, tanto en las calles como en las casas, supongo que tendrá que ver con el menor número de horas de luz que hay en esa zona. También, la cantidad de anuncios de mercadillos navideños y de actos relacionados con la Navidad que había.

Tras una buena noche de descanso, volvimos de nuevo a Montraux para visitar el Castillo de Chillón. Aunque en la zona se han encontrado restos anteriores a la época romana, las primeras construcciones de parte dee la fortaleza datan del siglo X, construyéndose el resto de la misma durante los siglo XIII a XIV. El castillo vigilaba una zona de paso estrecha que permite controlar el tráfico hacia Italia a través del valle del Ródano. Tuvo diversos propietarios hasta finales del siglo XIX donde la propiedad pasó a manos del estado suizo y se convirtió en una atracción turística.

Durante la época de Navidad se organizan diversas actividades de las cuales se puede disfrutar mientras se visita el castillo: Se puede disfrutar de danzas mediavales, hay un alfarero que explica como hacer cerámica, un taller de elaboración de velas, venta de recuerdos, se puede comer con recetas de la época. Las vistas hacia el lago Lemán y las montañas de la zona son preciosas.

Después de visitar el castillo y comer algo, nos dirigimos a la vecina comuna de Vevey para visitar el Museo NEST. Se trata de un museo interactivo, dedicado a la historia de la marca Netsle. A lo largo de diversas salas te van contanto la historia de Nestle desde su fundación por Henri Nestlé hasta nuestros días. Eso si, pagar para que te vendan la marca tiene su aquel :). En todo caso, visita entretenida, a lo tonto, a nosotros se nos fue dos horas en el museo.

Nos quedamos sin visitar el Queen The Studio Experience, Chaplin's World, un museo del cómico situado en su antigua casa suiza o el el mismo Vevey, el Musée suisse de l'appareil photographique, un museo de cámaras de fotográficas, pero el día no daba para mucho más

Volvimos a la casa donde nos quedamos para descansar y pasar la mañana en el mercadillo navideño de Sciez, una villa cercana al pueblo donde nos quedamos. A pesar de no ser muy grande, estaba muy animado, con diferentes puestos de artesania, puestos de comida y bebida. Tras comer algo, nos dirigimos al aeropurto de Ginebra para volver a Madrid, tras tres días bastante intensos.

De este viaje me han llamado la atención algunas cosas:

  • Suiza es un país extremadamente caro para el bolsillo español. Hablando con algunos compañeros después del viaje, me comentó que hay personas que prefieren vivir en Francia y pasar a trabajar a Suiza.
  • Las calles suizas y francesas d esa zona son extremadamente limpias. Llama mucho la atención, o al menos a mi, cuando lo comparo con el centro de Madrid por poner un ejemplo.
  • Comparado con otras ciudades europeas incluido las españolas, esa parte de Suiza es poco accesible para personas que van en silla de ruedas. En otros lugasres en los que he estado, han mimado mucho más este asunto.