Ejecutar en Terminal linux desde Sublime Text

Después de muchos intentos, he conseguido que Sublime Text abra un terminal, compile y ejecute nuestros programas ahí, evitando problemas al leer datos por la entrada estándar en la propia consola del editor. De esta manera conseguiremos un efecto equivalente al de la entrada Ejecutar en cmd.exe desde Sublime Text.

La idea es crear un script en linux que compile y ejecute un código fuente en un terminal, y mediante un Build System de Sublime Text, se llame a este script pasandole como parámetros el nombre del archivo de código fuente.

Lo primero que debemos hacer es crear un script en linux, para ello crear un nuevo archivo con Sublime Text, y guárdalo en tu carpeta personal en Documentos como runJava.sh o con el nombre del lenguaje que ejecutará (runC.sh, runC#.sh, etc).

Seguidamente en ese archivo deberás colocar el siguiente código:
#!/bin/bash
gnome-terminal -e "/bin/bash -c 'javac $1; java $2; echo; read -p 'Pulse_intro_para_salir...'; exit; exec /bin/bash'; &"
Este script nos servirá para compilar y ejecutar un archivo .java, si quieres utilizar otro lenguaje, tan solo debes borrar donde pone "javac $1; java $2;" y colocar ahí los comandos para compilar y ejecutar con el lenguaje deseado separados ambas acciones con un ";". Por ejemplo para compilar y ejecutar C++ el script quedaría así:
#!/bin/bash
gnome-terminal -e "/bin/bash -c 'g++ -Wall $1 -o $2; ./$2; echo; read -p 'Pulse_intro_para_salir...'; exit; exec /bin/bash'; &"
Lo siguiente que debemos hacer es dar permisos de ejecución a este script para que podamos ejecutarlo.  Si os manejáis con el Terminal, ya sabéis, chmod 700 y todo listo ;), si no, tan solo debes hacer click con el botón derecho sobre nuestro archivo .sh, pinchar en Propiedades, y en la pestaña Permisos hacer click en Permitir ejecutar el archivo como un programa.


Seguidamente solo nos queda crear un nuevo Build System que si no sabes lo que es, en la siguiente entrada lo explico detalladamente Compilar y ejecutar JAVA desde Sublime Text, el Build System podría llamarse runJava.sublime-build, siguiendo con el ejemplo anterior, y su contenido quedará así:
{
    "cmd": ["~/Documentos/runJava.sh ${file_name} ${file_base_name}"],
    "shell": true
}
Y eso es todo, selecciona el Build System y la próxima vez que compiles tu código (Ctrl+b) este se compilará y ejecutará en un Terminal donde podrá recibir datos de entrada sin problemas.

Nota
Esta es una solución un tanto particular, si utilizas otro lenguaje de programación, y no sabes como configurar el script, comenta aquí abajo e intentaré echarte una mano.

Comentarios

  1. Como puedo ejecutar un programa .c en un script

    ResponderEliminar
    Respuestas
    1. Acabo de hacer una nueva entrada explicándolo, espero que te sea de utilidad y si tienes alguna otra duda, no dudes en comentar.

      Saludos.
      Compilar y ejecutar C en terminal linux Sublime Text

      Eliminar
  2. Hola amigo soy en que te pregunto como se haria en una Mac OS X Mavericks!
    Mira ya he echo lo que dice el tutorial pero no consigo que funcione ahora me marca el siguiente error:
    /Users/LexCovent/Documents/SOFTWARE DESIGNING TOOLS/runJava.sh: line 2: gnome-terminal: command not found

    Quedo a la espera de tu ayuda por favor!

    ResponderEliminar
  3. Gracias por el aporte. Seguí investigando y al final me quedé con un 'runC++.sublime-build' asi:

    {
    "cmd": ["g++ -Wall ${file_name} -o ${file_base_name}"],
    "working_dir": "${file_path}",
    "shell": true,

    "file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
    // "selector": "source.c, source.c++",

    "variants":
    [
    {
    "name": "Run",
    "cmd": ["gnome-terminal -e ${file_path}/${file_base_name}"]
    }
    ]
    }

    La variante run aparece en el menú Tools y es suficiente para mi.

    ResponderEliminar
  4. Por favor alguien podria ayudarme, algo así para ejecutar y compilar Java en Termina y poder ingresar datos con Scanner pero para sistema Mac OS X??
    Se los agradeceria tanto, porque ya he buscado y no encuentro nada. Por favor!!

    ResponderEliminar
  5. Muchas gracias, me sirvió a la perfección!!

    ResponderEliminar
  6. Buenas un saludo y ante todo muchisimas gracias. Me funciono lo único que tuve que quitar para que se lanzara la terminal en mi caso uso linux, fueron los corchetes ala sublime-build en mi caso c++ el lenguaje.

    ResponderEliminar
  7. I did everything step by step and I still got this error message while trying to build it

    /bin/sh: 1: /home/ravenclaw/Documentos/runC.sh: not found

    I got that for this (C) and also for your example on java.... I don't really know what to do.

    ResponderEliminar
    Respuestas
    1. Quizas un tanto-demasiado tarde, pero en caso que alguien mas tenga el problema es por el archivo sublime-build el cual se tiene que cambiar "Documentos" por "Documents" en algunos sistemas.
      Otra opcion es cambiar de lugar el archivo sh y ponerlo en la carpeta de Sublime Text... por lo cual opte para no eliminarlo por accidente (de hacer esto, obviamente tambien se tendria que modificar el archivo sublime-build o crear un symlink a la carpeta Documentos)

      Eliminar
  8. como compilo el c++ de sublime en mac si puedes ayudarme te lo agradeciria no quiero estar usando wine para este tipo de cosas debe aver algo nativo o diseñaso para mac para compilar c++ y c#

    ResponderEliminar
  9. muchas gracias , quedo muy bien solo que tuve que modificar un poquito el script ya que lo ocupaba para python y python no compila , mas bien interpreta al vuelo , pero quedo de maravilla , seguire esta pagina saludos

    ResponderEliminar
  10. pregunto sobre otro tema, es posible utilizar un debugger par lenguaje C en sublime text?

    ResponderEliminar
  11. Como se puede modificar para python?

    ResponderEliminar
  12. Para el que necesite para Python 3, quedaria algo asi (de usarse en Python 2 solo habria que cambiar "python3" por "python"):

    #!/bin/bash
    gnome-terminal -e "/bin/bash -c 'python3 $1; echo; read -p 'Salir...'; exit; exec /bin/bash'; &"

    ResponderEliminar
  13. Muchas gracias! Muy útil. Lo que estaba buscando desde hace mucho!

    ResponderEliminar

Publicar un comentario

Si tenéis alguna duda o sugerencia, no dudéis en comentar. ;)

Entradas populares de este blog

Ordenar cualquier array con SORT en JAVA

Modificadores de acceso (public, protected y private) JAVA

Calcular factorial de un numero en JAVA