Re: Duda nombre de carpetas con espacios
El Fri, 21 Feb 2014 16:37:12 -0500, Ismael L. Donis Garcia escribió: Estoy intentando realizar un script que va a ser ejecutado sh backup.sh Pero resulta que dentro existe una carpeta que tiene espacios y no logro que me funcione: He intentado de mil formas, pero ninguna me funciona: con: DIR=/mnt/Salvas/Bases de Datos/diarias DIR=/mnt/Salvas/Bases\ de\ Datos/diarias DIR=/mnt/Salvas/'Bases de Datos'/diarias Pero de ninguna forma va. Hum... veamos: sm01@stt008:~$ cat Escritorio/test.sh DIR1=/mnt/Salvas/Bases de Datos/diarias; echo $DIR1 DIR2=/mnt/Salvas/Bases\ de\ Datos/diarias; echo $DIR2 DIR3=/mnt/Salvas/'Bases de Datos'/diarias; echo $DIR3 sm01@stt008:~$ sh Escritorio/test.sh Escritorio/test.sh: 3: Escritorio/test.sh: de: not found /mnt/Salvas/Bases de Datos/diarias /mnt/Salvas/Bases de Datos/diarias Salvo la primera el resto parece funcionar sin problemas. ¿Qué error te aparece? Como solventar esto sin eliminar los espacios? Prueba a depurar el error tú mismo y si no te entiendes manda la salida a la lista: sm01@stt008:~$ sh -x Escritorio/test.sh + DIR1=/mnt/Salvas/Bases de Datos/diarias Escritorio/test.sh: 1: Escritorio/test.sh: de: not found + echo + DIR2=/mnt/Salvas/Bases de Datos/diarias + echo /mnt/Salvas/Bases de Datos/diarias /mnt/Salvas/Bases de Datos/diarias + DIR3=/mnt/Salvas/Bases de Datos/diarias + echo /mnt/Salvas/Bases de Datos/diarias /mnt/Salvas/Bases de Datos/diarias Saludos, -- Camaleón -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/pan.2014.02.22.15.16...@gmail.com
Re: Duda nombre de carpetas con espacios
On Fri, Feb 21, 2014 at 04:37:12PM -0500, Ismael L. Donis Garcia wrote: Estoy intentando realizar un script que va a ser ejecutado sh backup.sh Pero resulta que dentro existe una carpeta que tiene espacios y no logro que me funcione: He intentado de mil formas, pero ninguna me funciona: con: DIR=/mnt/Salvas/Bases de Datos/diarias DIR=/mnt/Salvas/Bases\ de\ Datos/diarias DIR=/mnt/Salvas/'Bases de Datos'/diarias Pero de ninguna forma va. Como solventar esto sin eliminar los espacios? Creo que ya un listero comentó, pero yo quiero recalcar en la IMPORTANCIA de esto, ya que veo que los que te están pasando sugerencias no tienen idea de lo que hablan. Es de GRAN importancia que cuando utilices una variable, la protejas con comillas dobles. Esto es, usa $variable, nunca $variable. La razón es un poco compleja, pero haré mi intento para simplificar. Por estándar, el shell está mandado a aplicar estos dos pasos, a aquellas variables que se expanden SIN resguardar con comillas dobles: 1. Fragmentación en palabras 2. Expansión de patrones de tipo glob La fragmentación en palabras significa que si tu variable contiene espacios, al expandirla SIN comillas, el shell partirá lo que se considera como una sola palabra, en múltiples, utilizando los espacios como punto de fragmentación. Esto lo puedes ver muy simple con este código: dualbus@debian:~$ args(){ printf '%s' $@; printf \\n; } dualbus@debian:~$ var='variable con espacios' dualbus@debian:~$ args $var variableconespacios dualbus@debian:~$ args $var variable con espacios Si notas, en el primer caso, args recibe 3 argumentos, 'variable', 'con', y 'espacios', cada uno de forma individual. En el segundo caso, cuando está entre comillas dobles, lo recibe como un solo argumento (en tu caso es lo que buscas, que se preserve el nombre de archivo como uno solo). Nota: nunca uses el comando 'echo' para diagnosticar este tipo de asuntos. Es inútil, ya que no puedes distinguir entre: echo 'hola mundo' y echo hola mundo que en realidad son comandos muy diferentes. Ahora, para guardar espacios en el nombre es bastante sencillo, de hecho hay tres maneras típicas: 1.- var='mi variable con espacios' 2.- var=mi variable con espacios 3.- var=mi\ variable\ con\ espacios Nota que no usé la aberración que es: var=mi\ variable\ con\ espacios # esto está MAL, MAL Así que hasta el momento ya vimos cómo evitar que se pierdan tus espacios, y cómo ponerlos en tus variables. Una cosa particular es que puede que esté algún caracter adicional en el nombre que no estés notando. Para diagnosticar esto, te recomiendo hagas un: printf '%q\n' /mnt/Salvas/Bases* (nota, no omitas ningún caracter) Con este comando, podrás darte cuenta de si hay algún caracter escondido en el nombre que no estés notando. Y la ventaja es que su resultado lo puedes usar para definir la variable: dualbus@debian:~$ mkdir 'Nombre Con Espacios' dualbus@debian:~$ printf '%q\n' Nombre* Nombre\ Con\ Espacios por lo que puedes hacer: nombre=Nombre\ Con\ Espacios También, como recomendó otro listero, puedes usar sh -x tuscript para diagnosticar problemas, y ver que realmente haga lo que tú pretendes. En resúmen: Para guardar cadenas con espacios basta con utilizar ya sea comillas sencillas ('), dobles (), o el contradiagonal (\). Esto es para *guardar* en la variable. Para utilizar la variable, y que no se *pierdan* los espacios, recuerda poner la variable entre comillas dobles: $var, nunca $var. De tal forma que al final tengas algo así: DIR='/mnt/Salvas/Bases de Datos/diarias' echo prueba $DIR/archivo-de-prueba Este es un ejemplo de como utilizar la variable para crear un archivo dentro del directorio. Saludos, -- Eduardo Alan Bustamante López -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/20140222161239.ga13...@dualbus.me
Re: OT - autofs y tmpfs
El Fri, 21 Feb 2014 15:15:32 + (UTC) Camaleón noela...@gmail.com escribió: El Thu, 20 Feb 2014 22:19:02 +0100, Juanjo López escribió: Hola. (ese html...) Perdón; envié envie desde el cliente WEB de GMail, y hace mucho que no lo uso. Esta respuesta va desde claws-mail :-) Recientemente, he instalado un SSD como segundo disco duro, con una partición F2FS para /. /home se encuentra en esa misma partición. El objetivo es minimizar las escrituras en este disco SSD, por lo que había pensado en lo siguiente: * Para cada usuario, crear un archivo .tar en /var/local, que contenga todos los archivos de su home. * En auto.master, crear un mapa para el directorio /home: '/home program:/usr/local/bin/autohome' Cada vez que un usuario entre al sistema, el script que genera el mapa se encarga de extraer el tar bajo /tmp/home ( /tmp es tmpfs ), y devuelve a su vez un mapa del tipo '$NAME -fstype=bind :/tmp/home/$NAME'. Uhhh... uséase, que la /home esté en la memoria RAM, pero ¿no es un poco arriesgado? Si la sincronización falla podrías perder datos :-? Es un equipo doméstico. Ni mis niños ni sus padres trabajan con 'datos críticos'. De todas formas, un pequeño script desde cron minimiza pérdidas. ;-) Hasta aquí, todo OK. El problema es: ¿ como actualizar el tar con los datos de cada usuario al desmontar su /home ?? No encuentro ninguna forma de ejecutar ningún tipo de script al desmontar el directorio, con lo que los datos de cada usuario no son volcados a su archivo .tar correspondiente, y cualquier cambio se pierde. He pensado en poner un script en cron que actualice los datos del usuario cada cierto tiempo (si es que hay cambios), por ejemplo con rsync (y eliminar el tar del esquema), pero no me parece una solución elegante, y siempre puede suceder que un usuario salga antes de que el cron llame al script de sincronización y se pierdan los últimos cambios. ¿ Alguna sugerencia ? Lo del archivo .tar se me escapa, pero creo que este sistema te podría servir: Ubuntu thumb drive http://robwicks.com/tag/tmpfs/ Lo del tar es una 'pijada'. En vez de guardar los datos en un directorio, hacerlo dentro de un archivo tar. Ya lo he eliminado del esquema. Efectivamente, lo que quiero realizar es algo como lo que explican en el enlace. En un principio, la idea era utilizar autofs para montar los directorios de los usuarios en tmpfs, sincronizandolos con un archivo tar (eliminado del esquema), o desde un directorio. Este sistema tiene un inconveniente: algunos programas, como por ejemplo 'lightdm', acceden a TODOS los directorios de los usuarios buscando ciertos archivos. Por ejemplo, 'lightdm' busca los archivos '.face' para mostrar las imágenes de los usuarios. Si utilizo autofs, se cargan en memória todos los directorios /home/, lo cual no es aceptable. Actualmente, estoy experimentando con otra secuencia, en varios pasos: 1.- Arranque del sistema. Se crean y sincronizan los directorios /home/ de todos los usuarios, copiando tan solo ciertos datos (archivos .face en este caso). 2.- libpam-script, que a su vez ejecuta un script cada vez que un usuario INICIA sesión. Un rsync y listo. 3.- Un script en cron, que periodicamente (cada 15 minutos) realice un rsync de los directorios /home/ de los USUARIOS LOGUEADOS. 4.- libpam-script, que a su vez ejecuta un script cada vez que un usuario FINALIZA sesión. Otro rsync. Estoy en ello; si os resulta interesante, cuando lo termine posteo los detalles exactos. Creo que puede resultar útil para algunos. En lo referente a la pregunta inicial, alguna forma de ejecutar algo al desmontar una unidad, no he encontrado nada relevante. Aparece por ahí algo sobre programas auxiliares, del tipo umount.smb, pero no he profundizado. Como ya he comentado, el automontaje presenta ciertos inconvenientes, por lo que he descartado esa ruta de acción. Saludos, Saludos. -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/2014020325.25c94537@lilu
Re: Duda nombre de carpetas con espacios
El 22/02/14 17:12, Eduardo A. Bustamante López escribió: On Fri, Feb 21, 2014 at 04:37:12PM -0500, Ismael L. Donis Garcia wrote: Estoy intentando realizar un script que va a ser ejecutado sh backup.sh Pero resulta que dentro existe una carpeta que tiene espacios y no logro que me funcione: He intentado de mil formas, pero ninguna me funciona: con: DIR=/mnt/Salvas/Bases de Datos/diarias DIR=/mnt/Salvas/Bases\ de\ Datos/diarias DIR=/mnt/Salvas/'Bases de Datos'/diarias Pero de ninguna forma va. Como solventar esto sin eliminar los espacios? Creo que ya un listero comentó, pero yo quiero recalcar en la IMPORTANCIA de esto, ya que veo que los que te están pasando sugerencias no tienen idea de lo que hablan. Es de GRAN importancia que cuando utilices una variable, la protejas con comillas dobles. Esto es, usa $variable, nunca $variable. La razón es un poco compleja, pero haré mi intento para simplificar. Por estándar, el shell está mandado a aplicar estos dos pasos, a aquellas variables que se expanden SIN resguardar con comillas dobles: 1. Fragmentación en palabras 2. Expansión de patrones de tipo glob La fragmentación en palabras significa que si tu variable contiene espacios, al expandirla SIN comillas, el shell partirá lo que se considera como una sola palabra, en múltiples, utilizando los espacios como punto de fragmentación. Esto lo puedes ver muy simple con este código: dualbus@debian:~$ args(){ printf '%s' $@; printf \\n; } dualbus@debian:~$ var='variable con espacios' dualbus@debian:~$ args $var variableconespacios dualbus@debian:~$ args $var variable con espacios Si notas, en el primer caso, args recibe 3 argumentos, 'variable', 'con', y 'espacios', cada uno de forma individual. En el segundo caso, cuando está entre comillas dobles, lo recibe como un solo argumento (en tu caso es lo que buscas, que se preserve el nombre de archivo como uno solo). Nota: nunca uses el comando 'echo' para diagnosticar este tipo de asuntos. Es inútil, ya que no puedes distinguir entre: echo 'hola mundo' y echo hola mundo que en realidad son comandos muy diferentes. Ahora, para guardar espacios en el nombre es bastante sencillo, de hecho hay tres maneras típicas: 1.- var='mi variable con espacios' 2.- var=mi variable con espacios 3.- var=mi\ variable\ con\ espacios Nota que no usé la aberración que es: var=mi\ variable\ con\ espacios # esto está MAL, MAL Así que hasta el momento ya vimos cómo evitar que se pierdan tus espacios, y cómo ponerlos en tus variables. Una cosa particular es que puede que esté algún caracter adicional en el nombre que no estés notando. Para diagnosticar esto, te recomiendo hagas un: printf '%q\n' /mnt/Salvas/Bases* (nota, no omitas ningún caracter) Con este comando, podrás darte cuenta de si hay algún caracter escondido en el nombre que no estés notando. Y la ventaja es que su resultado lo puedes usar para definir la variable: dualbus@debian:~$ mkdir 'Nombre Con Espacios' dualbus@debian:~$ printf '%q\n' Nombre* Nombre\ Con\ Espacios por lo que puedes hacer: nombre=Nombre\ Con\ Espacios También, como recomendó otro listero, puedes usar sh -x tuscript para diagnosticar problemas, y ver que realmente haga lo que tú pretendes. En resúmen: Para guardar cadenas con espacios basta con utilizar ya sea comillas sencillas ('), dobles (), o el contradiagonal (\). Esto es para *guardar* en la variable. Para utilizar la variable, y que no se *pierdan* los espacios, recuerda poner la variable entre comillas dobles: $var, nunca $var. De tal forma que al final tengas algo así: DIR='/mnt/Salvas/Bases de Datos/diarias' echo prueba $DIR/archivo-de-prueba Este es un ejemplo de como utilizar la variable para crear un archivo dentro del directorio. Saludos, Magnífica respuesta, Eduardo. Lo has explicado todo muy bien. Me la guardo en marcadores. Yo creo que el problema del usuario que inició la consulta irá en el sentido que apuntas de no entrecomillar las variables cuando se usan. A mi me pasaba mucho al principio de hacer scripts. ;) un saludo! -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/5309144a.3040...@jesusda.com
Compilar e instalar programa en C++.
Buenas, buenas. Primero que todo, un saludo a todos. Mi pregunta es, yo tengo un programa escrito en C++ (Code-Blocks) y quisiera compilarlo de forma que lo pueda convertir en un .deb e instalarlo en Debian y poder manejarlo como una aplicación normal. Saludos y muchas gracias. -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/blu0-smtp181e833f4ebd840f7da32b0a1...@phx.gbl
Re: Compilar e instalar programa en C++.
2014-02-22 18:19 GMT-03:00 Brenillos brenil...@hotmail.com: Buenas, buenas. Primero que todo, un saludo a todos. Mi pregunta es, yo tengo un programa escrito en C++ (Code-Blocks) y quisiera compilarlo de forma que lo pueda convertir en un .deb e instalarlo en Debian y poder manejarlo como una aplicación normal. Para aprender a crear paquetes Debian, te recomendaría empezar leyendo: https://wiki.debian.org/IntroDebianPackaging Saludos, Toote -- To UNSUBSCRIBE, email to debian-user-spanish-requ...@lists.debian.org with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/CANk6MLYzPFj8VRvzEpCr=ik-dqiaqn_q03ycd489htjgriz...@mail.gmail.com