Artículos etiquetados "Shell"

DTerm: Una terminal integrada en el GUI

DTerm: Una terminal integrada en el GUI

Hace ya un montón de tiempo que la uso y pensaba que era algo conocido y de dominio público pero tras hablar con unas cuantas personas he visto que no la conocía tanta gente, así que si hay una app útil, sencilla y que se merece un artículo es esta: Dterm

DTerm es una terminal pero con unas características muy especiales que la hacen única… y es que no es una app al uso sino que funciona como un lanzador de aplicaciones, es decir, tiene un pequeño proceso en 2do plano que espera latente a que se le llame a través de una combinación de teclas. Cuando dicha combinación de teclas es pulsada, aparece una pequeña ventanita donde podremos insertar los comandos similar a esta:

 

Ventana de DTerm

Ventana de DTerm

 

Aunque vista así no parece gran cosa, no se deje engañar ya que tiene unas cuantas características que la hacen muy especial.

Para empezar, cada vez que la invocamos, el directorio de trabajo es aquel que tengamos abierto, esto es, si en Finder estamos en la carpeta /Aplicaciones, cuando se invoque DTerm este estará situado en ese directorio. Esto es realmente útil para muchísimas tareas, por ejemplo, una de las que mas se suele echar de menos cuando llegas a Mac tras haber usado Windows o Linux es la opción de hacer clic con el botón derecho del ratón y seleccionar «crear nuevo archivo». Esta función se puede reemplazar con DTerm ya que tras incovarlo podemos hacer un «touch fichero».

Otra de las características es que te da la opción de ejecutar el comando usando el propio DTerm como salida estándar o lanzarlo a través de la terminal que tengas por defecto. Esto significa que si lanzamos un comando que nos devuelva datos, por ejemplo, un ping, podremos ver el resultado en la misma ventana de DTerm, la cual esta muy bien configurada para mostrar las salidas estándar, las cuales no solo podremos visualizar, ya que también podremos selecionarlas y copiar.

Ejemplo de un ping con DTerm:

Ping con DTerm

Ping con DTerm

 

Por supuesto esto abre un sinfín de posibilidades para incluir DTerm en nuestro flujo de trabajo diario, ya que nos permitida hacer multitud de tareas de una forma súper rápida ya que las combinaciones son prácticamente ilimitadas… casi todo el potencial de una terminal sin tener que abrirla… cat, gzip, tail, scp, wget, curl… etc.

scp, curl, ping, wget, tail, redirecciones, pipes… las opciones son infinitas y la comodidad, asi como la velocidad a la hora de realizarlas es genial.

Además de todas estas bondades, hay que incluirle que tiene historial de comandos (Se puede recorrer con la tecla flecha arriba), autocompletados con el tabulador (tanto para ordenes como para archivos) y, en caso de que necesitemos lanzar el comando pero enviarlo a la terminal, podremos hacerlo si en lugar de usar la tecla INTRO para ejecutar usamos CMD + INTRO. Esto es muy útil cuando queremos lanzar un comando interactivo, es decir, un comando que nos solicite interactuar con el, no solo generar la salida en pantalla como por ejemplo un editor como el vim. Cabe destacar que otra característica es la integración con finder que nos permitirá detectar los ficheros o directorios seleccionados para ejecutar la orden contra ellos.

Menú de opciones y atajos respecto al comando a ejecutar:

Opciones de ejecución de DTerm

Opciones de ejecución de DTerm

 

En caso de que el comando lanzado se dilate en el tiempo, no es necesario mantener abierta la ventana de DTerm, de hecho, si hacemos clic fuera de ella se ocultará pero la tarea que hayamos lanzado desde ella continuará en segundo plano y cuando finalice. nos mostrará una notificación de Growl.

Dado que esto es solamente una pequeña presentación, y que el uso de DTerm es básicamente el uso de la terminal salvando ciertas diferencias, doy por concluido el articulo aquí, no sin dejar enlazado el video presentación de la web del desarrollador, donde se puede ver el DTerm en funcionamiento. Esta en inglés pero aunque alguien no lo entienda, solamente viendo el video captará la esencia de las ventajas que implica introducir DTerm en el flujo de trabajo del día a día.

Ah, una cosa más, por desgracia, esta era una de las mejores apps gratuitas que estaban en la Mac App Store y que por alguna razón ya no se encuentra allí. Eso si, continua siendo gratuita y está disponible en la web del desarrollador.

Aplicación: DTerm

Precio: Gratuita

Desarrollador: http://decimus.net/dterm

Descargar DTerm

leer más

Configurar el scroll con iTerm2 y GNU Screen

Configurar el scroll con iTerm2 y GNU Screen

Uno de los mejores inventos de software, cuando te acostumbras a usarlo, es Gnu Screen (A partir de ahora lo llamare solamente Screen). Si eres como yo, que uso continuamente la shell y no conoces screen, te lo recomiendo encarecidamente, te permite hacer muchas cositas interesantes que hacen la vida mas fácil y porque no, elegante (Si, hay soluciones elegantes incluso para la shell 🙂 )… pero estas lineas no son para hablar de las bondades de Screen sino para indicar como configurar una función que por defecto no me ha funcionado en el Mac con la combinación de iTerm2 y Screen: el scroll vertical.

Al principio pasaba sin el… pero reconozcámoslo, es una faena, por ejemplo: tener que lanzar un segundo ls porque lo que querías ver se ha quedado una o dos lineas fuera de pantalla, o incluso visualizando un fichero con cat…. o con otra cualquiera de las miles de situaciones a las que te empuja el hecho de no tener el scroll vertical asi que me puse a investigar un poco y he dado con la solución que es la siguiente:

Lo primero que deberemos hacer es tener en el  fichero .screenrc la configuración para tener scroll con diferentes tipos de terminal. Para ello debemos añadir alguna linea pero ya que tenemos que editar el fichero, os dejo mi configuración de Screen en la cual ponemos ver dos bloques:
– Las primera 3 lineas son para que se muestre la barra de «pestañas» en la parte inferior de la pantalla, con algo de información.
– Las ultimas 3 lineas son las que permiten tener el scroll.


hardstatus on
hardstatus alwayslastline
hardstatus string "%{.bW}%-w%{.rW}%n %t%{-}%+w %=%{..G} %H %{..Y} %d/%m %c "

term xterm-256color
defscrollback 1000
termcapinfo xterm|xterms|xterm-256color|vt100|xs|rxvt|rxvt-cygwin-native ti@:te@

La 1era de las 3 ultimas lineas:

term xterm-256color

Solamente esta cambiando el tipo de terminal que usaremos en screen. Por defecto, si hacemos desde screen:

echo $TERM

Nos mostrara que tenemos una terminal llamada screen, sobre la cual no tenemos ninguna configuración internaste, ni es muy y estándar que digamos asi que lo primero que deberíamos hacer es cambiarla y ya puesto la xterm-256color es muy competente y con bastantes colores, que sea una SHELL no significa que tenga que ser un castigo en monocromo o con varias tonalidades de tortura en verde y negro.

La 2da linea:

defscrollback 1000

Indica el numero de lineas que se podrá retroceder haciendo el scroll.

Y para finalizar, la linea que de verdad hace lo que queremos hacer:

termcapinfo xterm|xterms|xterm-256color|vt100|xs|rxvt|rxvt-cygwin-native ti@:te@

 

Habilita el scroll sobre varias terminales, no solo sobre xterm-256color que es la que hemos indicado que usaremos sino sobre unas cuantas mas, así esta linea me sirve en varios sistemas mas, incluido CYGWIN, de hecho, lo que suelo hacer en otros sistemas en copiarme el fichero $HOME/.screenrc tal y como os lo he mostrado hace unas lineas para tener el screen configurado.

Bien, llegamos a este punto es cuando probáis la configuración y ZAS! No funciona!! Aun nos falta una parte, tenemos que hacer un par de pequeños cambios en la configuración de iTerm2:

 

Preferencias de la app iTerm2

Preferencias de la app iTerm2

Tendremos que, obviamente, abrir iTerm2, sus preferencias y situarnos en PROFILES para poder después visualizar la pestaña TERMINAL.

Una vez en dicha pestaña, marcaremos  las dos opciones que aparecen bajo el textbox de «scrollback lines» el cual aprovechando el momento, podremos modificar también para que sean el mismo numero de lineas que hemos indicado en el fichero de configuración del Screen. Tras estos cambios solo nos quedaría indicarle también a iTerm2 que la terminal será del tipo xterm-256color y estada todo listo.

A partir de este momento, cuando use screen, tendrá el tan apreciado scroll vertical, además de las otras opciones de screen que hemos habilitado si no tenia ya.

 

leer más

Abrir Terminal aqui: Función para Finder que abre Terminal o iTerm2 en la carpeta actual

Abrir Terminal aqui: Función para Finder que abre Terminal o iTerm2 en la carpeta actual

Este script es ideal para los que quieran comenzar a hacer scripts sencillos en applescript ya que realiza tareas bastante comunes como obtener el path de la ventana del finder, comprobar si existe una app mediante el bundle identifier…etc Además que es de lo más útil , todo sea dicho.

El script está pensado para tener un enlace en la barra de herramientas del Finder, para lo que hay que arrastrarlo de forma de manual a él.

Una vez instalado en la Finder Toolbar, nos permitirá abrir la terminal en la misma carpeta donde esté situada la ventana del Finder donde pulsemos sobre el icono. Es mucho más sencillo de lo que parece:

Si en el Finder estas en la carpeta /Users/MiUsuario/Downloads y pulsas el boton que enlaza al script, abriras la termina en esa misma carpeta, no en la carpeta por defecto que se abre siempre en al terminal.

Ahora bien, he agregado una comprobación mas para que, si tenemos instalado en el equipo la aplicación iTerm2, nos abra esta en lugar de la Terminal de OSX.

Hay que decir también que applescript no es un lenguaje más rápido del mundo y si estamos en un Mac bastante viejo y somos unos fanaticos de la inmediated, es posible modificar el script para que nos lance directamente la app que queramos sin realizar ninguna otra comprobación, pero eso os lo dejo a vuestro gusto.

A continuación os dejo el script «tal cual» aunque para que sea realmente útil, es necesario convertirlo en app y llevárselo a la barra del Finder. Por esta razón os doy dos opciones, escoged la que queráis 🙂 :

1.- Bajar la version compilada (enlace al final del articulo)

2.- Copiar el código (mostrado mas abajo) y compilarlo como aplicación.

Después de haber seguido cualquiera de las dos, mi consejo es que os lleveis el «.app» a la carpeta aplicaciones (No porque solo funcione desde allí sino porque será más fácil que no se elimine por error o se mueva) y una vez allí, arrastrarla a la barra superior del Finder, tal y como vemos en la siguiente captura:

 

Se arrastra la app a la Toolbar del finder

 

Se arrastra la app a la Toolbar del finder

Este es el script:
*NOTA: El coloreado del código no es correcto porque applescript no está soportado por el plugin de wordpress y lo he marcado como ActionScript3 pero esto solo afecta a los colores para mostrarlo en WEB.


(*
Abrir Terminal aqui
por Alvaro Anaya
www.archivoslog.es
Version 0.1
*)
-- Lo primero es recoger la direcc de la ventana del Finder
tell application "Finder" to set rutaProcesada to (folder of the front window) as alias
-- Ahora comprobamos si esta instalado el iTerm2 (con el bundle identifier es mas fiable)
try
tell application "Finder" to get application file id "com.googlecode.iterm2"
set existeApp to true
on error
set existeApp to false
end try
-- Ahora si existe, abrimos la ruta en iTerm, de lo contrario, en Terminal
if existeApp is true then
tell application "iTerm"
open rutaProcesada
activate
end tell
else
tell application "Terminal"
open rutaProcesada
activate
end tell
end if

Por supuesto, el icono de la app es modificable al 100%. Por ejemplo, si tomamos el de la misma Terminal, el aspecto que muestra la barra del finder mejora bastante como podemos ver a continuación aunque si tenemos un icono de aspecto similar al de los otros botones de la barra del finder, quedaria mucho mejor, sin duda:

Finder Toolbar con "Abrir terminal aquí" y el icono de Terminal.app

 

Finder Toolbar con «Abrir terminal aquí» y el icono de Terminal.app

Y como siempre… esta es la verison «Todo hecho» para la gente sin tiempo/ganas de «cacharrear». Es el enlace al script ya compilado como .app y con el icono de la terminal. Solo es necesario llevarlo a la carpeta «/Aplicaciones» y desde allí, arrastrarlo a la barra del Finder:

Enlace a «Abrir Terminal Aqui»:

Descargar app compilada

leer más

Descomponer una ruta en directorios, nombre de archivo y extensión en Bash

Una tarea que puede ser bastante común a la hora de escribir scripts o aplicaciones que trabajen con el sistema de archivos es la necesidad de descomponer una ruta completa del tipo «/directorio/subdirectorio/…/…/archivo.extension» para obtener por separado el nombre de archivo, la extensión y la ruta de directorios. De hecho, fue una de las necesidades que me ha surgido estos días, escribiendo un Shell Script un tanto grande en el que necesitaba obtener el nombre de un archivo de una ruta completa así como la estructura de directorios hasta el mismo.

Dado que me suele gustar, al escribir scripts de cierto tamaño, dividirlos por bloques de código independientes, voy a publicar este como una solución aislada para solventar el problema de descomponer rutas aunque cuando lo volváis a ver en el script que aún no he terminado aparecerá como una función por la comodidad que representan y porque facilitan mucho la lectura del código en scripts de muchas lineas. Sin más preámbulos, vamos manos a la obra:

Dado que este código ahora es independiente, he realizado algunos cambios como que tome la entrada de datos a modo de parametros tras el nombre del script por lo que la ruta a descomponer, deberá ir tras el nombre del script en lo que seria el parámetro $1, es decir, tendriamos que pasárselo de la siguiente manera:

./script.sh /ruta/que/queramos/descomponer/archivo.extension
Por el mismo motivo, lo he dispuesto de forma que la salida del mismo sea la salida estándar mostrando el valor de cada una de las variables que intervienen en el proceso.

También he comentado las lineas relevantes ya que creo que será mejor explicar cada una de las lineas en el mismo punto donde aparece. Así pues, este es el script:

 



#!/bin/bash
# Script para descomponer una ruta completa a un archivo o directorio, obteniendo
# el nombre de archivo y extensión (si existen) y ruta hasta los mismos
for RutaCompleta in $1
do
# Comenzamos extrayendo la parte derecha desde el ultimo caracter "/", es decir, el archivo
NombreArchivo="${RutaCompleta##*/}"
# Longitud de la ruta es el total de caracteres menos el largo del nombre de archivo
LargoRuta="${#RutaCompleta} - ${#NombreArchivo}"
# Extraermos la ruta desde el caracter 0 hasta el caracter final de largo de ruta
RutaSola="${RutaCompleta:0:$LargoRuta}"
# Lo siguiente es extraer nombre de archivo
NombreSolo="${NombreArchivo%.[^.]*}"
# Extension se obtiene eliminando del nombre completo el nombre mas el punto
Extension="${NombreArchivo:${#NombreSolo} + 1}"
# Las 2 lineas anteriores fallan si no hay extension por lo que es necesario comprobar que no
# se de el caso de que haya extension pero no nombre ya que en ese caso la ext seria el nombre
if [[ -z "$NombreSolo" && -n "$Extension" ]]; then
NombreSolo=".$Extension"
Extension=""
fi
done
# Este es el resultado del script
echo
echo "Este es el resultado del script:"
echo
echo La ruta completa es:
echo $RutaCompleta
echo
echo "Ruta.........: \"$RutaSola\""
echo "Nombre.......: \"$NombreSolo\""
echo "Extension....: \"$Extension\""
echo


Si lo ejecutamos, la salida del mismo, según está, sería similar a esto
:

 


$ ./descomp.sh /dir1/subdir1/subdir2/archivo.txt

Este es el resultado del script:

La ruta completa es:
/dir1/subdir1/subdir2/archivo.txt

Ruta………: «/dir1/subdir1/subdir2/»
Nombre…….: «archivo»
Extension….: «txt»


Ahora bien, hay que tener en cuenta que si lo vamos a utilizar como una función llamada desde otro script o simplemente como un bloque de código incrustado entre las lineas, habría que hacerle algunos cambios, pero dado que lo estoy utilizando en otro script que voy a publicar aquí también, no lo explicaré aún ya que es cuestión de tiempo que me toque hacerlo.


 

 

leer más