Generar un script en Bash desde un script en Perl
Publicado: 2012-08-07 02:40 @152
Hola a todos.
Estoy tratando de generar un script en Bash desde un script en Perl a partir de una variable que contiene las líneas de dicho script.
El problema viene al ejecutar el script, me salen errores con el retorno de carro (\r).
El contenido de la variable podría ser cualquier script en Bash que se recoje desde una base de datos MySQL, de una columna TEXT, y que se ha escrito y subido a la base de datos desde un formulario HTML con <textarea>.
El contenido de la variable podría ser algo similar a:
y el código para crear el archivo Bash es el siguiente:
El problema es que la salida de system() me da error porque al final de cada comando, en algun momento, se le añade un retorno de carro, y no sé cómo solucionarlo. Llevo varias horas y he probado muchas y diferentes tecnicas que he leido por ahí, pero no encuentro nada que funcione.
La salida de Perl sería esta:
cp: no se puede crear el fichero regular «backup/service.log\r»: No existe el fichero o el directorio
Aparte de que la carpeta que se crea parece llamarse backup pero en realidad se llama backup\r, pero esto no lo muestra como un error.
De antemano, muchas gracias.
Estoy tratando de generar un script en Bash desde un script en Perl a partir de una variable que contiene las líneas de dicho script.
El problema viene al ejecutar el script, me salen errores con el retorno de carro (\r).
El contenido de la variable podría ser cualquier script en Bash que se recoje desde una base de datos MySQL, de una columna TEXT, y que se ha escrito y subido a la base de datos desde un formulario HTML con <textarea>.
El contenido de la variable podría ser algo similar a:
Using perl Syntax Highlighting
- my $postcmd = 'mkdir backup
- cp service.log backup/service.log';
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
y el código para crear el archivo Bash es el siguiente:
Using perl Syntax Highlighting
- my (@postcmdlines) = $postcmd;
- open FILE, ">>postinstall.sh";
- foreach my $postcmdline ( @postcmdlines )
- {
- print FILE $postcmdline;
- }
- close FILE;
- chmod 0755, 'postinstall.sh';
- system('./postinstall.sh');
- unlink "postinstall.sh";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
El problema es que la salida de system() me da error porque al final de cada comando, en algun momento, se le añade un retorno de carro, y no sé cómo solucionarlo. Llevo varias horas y he probado muchas y diferentes tecnicas que he leido por ahí, pero no encuentro nada que funcione.
La salida de Perl sería esta:
cp: no se puede crear el fichero regular «backup/service.log\r»: No existe el fichero o el directorio
Aparte de que la carpeta que se crea parece llamarse backup pero en realidad se llama backup\r, pero esto no lo muestra como un error.
De antemano, muchas gracias.