Bueno, muchas veces (aunque deberian ser menos, no debemos depender de las consolas), en un script necesitamos llamar a la consola del sistema. El problema es que alomejor no sabemos en que systema operativo está corriendo el script, claro que podriamos buscarlo con RUBY_PLATFORM, y luego hacer un if, o un case etc...Pero para no tener que hacer eso, pues he empezado a escribir esta pequeña libreria. Se trata de una especie de multiconsola, con comandos propios que valen para los dos principales SO (win y linux). Con un nombre de comando, no necesitas saber si estás en win o lin. De momento lo he hecho para los principales comandos, para la v2 si alguien quiere ampliarla, le puede meter mas comandos, y mas SO:
Por ejemplo si queremos listar los archivos del directorio actual seria ls para uno, dir para otro. Con esta consola seria 'ver'
console.ver
Y haciendo esto se ejecutaria el ls o el dir dependiendo del os y se nos devolveria un objeto IO.popen (ver capitulo de hilos de sh4van3). Este es un pequeño ejemplo.
Está escrito en forma de clase para poder incuirlo en cualquier otro code que tengamos ^^.
No me enrollo más:
#Clase para emular algunos comandos de consola
#La particularidad es que los comandos son propios de la clase
#Y la misma clase reconoce si está corriendo sobre win o linux
#Por tanto, usando el mismo comando, de esta consola, opera sobre win y lin
#Consola multiplataforma, sintaxis propia, para codes en los que se necesita system.
class Console
def initialize
if RUBY_PLATFORM =~ /linux/
@os="linux"
end
if RUBY_PLATFORM =~ /win/
@os="win"
end
end
def ver
case @os
when 'linux'
@r = IO.popen('ls')
when 'win'
@r = IO.popen('dir')
end
return @r
end
def cd(dir)
@r = IO.popen('cd #{dir}')
end
def dir
case @os
when 'linux'
@r = IO.popen('pwd')
when 'win'
@r = IO.popen('cd')
end
end
def limpiar
case @os
when 'linux'
@r = IO.popen('clear')
when 'win'
@r = IO.popen('cls')
end
end
def borrar(arc)
case @os
when 'linux'
@r = IO.popen('rm #{arc}')
when 'win'
@r = IO.popen('del #{arc}')
end
end
def mover(arc, dest)
case @os
when 'linux'
@r = IO.popen('mv #{arc} #{dest}')
when 'win'
@r = IO.popen('move #{arc} #{dest}')
end
end
def copiar(arc, dest)
case @os
when 'linux'
@r = IO.popen('cp #{arc} #{dest}')
when 'win'
@r = IO.popen('copy #{arc} #{dest}')
end
end
def creard(name)
case @os
when 'linux'
@r = IO.popen('mkdir #{name}')
when 'win'
@r = IO.popen('md #{name}')
end
end
def borrard(name)
case @os
when 'linux'
@r = IO.popen('rm -r #{name}')
when 'win'
@r = IO.popen('rd #{name}')
end
end
end
#Prueba
consola = Console.new
ls=consola.ver