Ejecutar un script recién programado

Cuando escribimos un script y lo queremos ejecutar debemos hacer dos pasos, primero darle permisos de ejecución y luego escribir ./ y el nombre del script:

chmod +x script.sh
./script.sh

Si sólo programamos un script cada varios días puede ser llevadero, pero cuando programamos scripts cada día y muchos días varios scripts, puede llegar a ser tedioso tener que escribir el símbolo + y sobre todo la combinación de . y /

Como toda tarea repetitiva se puede automatizar y hacer que nuestro trabajo sea más cómodo. Podemos automatizar esta acción con:

#!/bin/bash

chmod +x $1
./$1

Este script funcionaría independientemente de si el fichero indicado como parámetro tiene o no permisos de ejecución. Pero sería más elegante sólo ejecutar el chmod si no tiene permisos de ejecución con:

[ -x $1 ] || chmod +x $1

Y, mejor aún, comprobar si el script ha recibido un fichero existente como parámetro:

if [ ! -f $1 ] || [ -z $1 ]
then
    echo "Debe escribir un fichero para poder ejecutarlo."
    exit 1
fi

Por lo que el script nos quedaría así:

#!/bin/bash

if [ ! -f $1 ] || [ -z $1 ]
then
    echo "Debe escribir un fichero para poder ejecutarlo."
    exit 1
fi
[ -x $1 ] || chmod +x $1
./$1

En este punto nos encontraríamos con que no tendríamos que escribir el +x, pero seguiríamos teniendo la farragosa combinación ./, por lo que tendríamos que copiarlo a uno de los directorios de las rutas de ejecutables. Podemos saber estas rutas con:

echo $PATH

Lo más cómodo que podemos hacer es mirar si alguno de esos ficheros se encuentra en nuestra home y, si es así, copiarlo a ese directorio, por ejemplo, si con echo $PATH nos aparece algo como /home/usuario/.local/bin y hemos llamado al script execute, escribiremos:

cp execute /home/usuario/.local/bin

O, si le hemos llamado execute.sh:

cp execute.sh /home/usuario/.local/bin/execute

De esta manera, nos ahorramos tanto el escribir ./ como el .sh.

 

Editar y ejecutar

Ese script lo podemos acompañar con otro para editar el script y que lo ejecute automáticamente, generando una mayor optimización de tiempo y esfuerzo.

Podemos escribir al principio del script el nombre de nuestro editor de texto favorito o usar la variable de entorno $EDITOR para que sea más genérico y, de esa manera, al guardar el fichero, lo ejecutará.

#!/bin/bash

if [ ! -f $1 ] || [ -z $1 ]
then
    echo "Debe escribir un fichero para poder editarlo y ejecutarlo."
    exit 1
fi

$EDITOR $1
[ -x $1 ] || chmod +x $1
./$1

Y, si queremos ir un paso más en la automatización y evitar combinaciones complejas de teclas, podríamos incluso comprobar si el fichero no existe y añadirle el shebang en caso de que tenga una extensión .sh:

#!/bin/bash
if [ -z $1 ]
then
    echo "Debe escribir un fichero para poder editarlo."
    exit 1
elif [ ! -f $1 ]
then 
    if [ ${1#*.} = "sh" ]
    then
        echo "#!/bin/bash" > $1
        echo "" >> $1
        echo "" >> $1
    fi
fi

$EDITOR $1
chmod +x $1
./$1

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.