Script
-
Hola a todos:
En otros foros la gente siempre me pregunta como montar dispositivos USB (camaras o pen-drives) . Siempre respondo lo mismo mount /dev/sda1 /mnt/memo pero despues de 20 veces ya cansa. Entonces,se me ocurrio hacer un script SIN SABER NADA DE SCRIPTING; ayer a la noche me puse a probar, y llegue, a solo 10 minutos de comenzar a hacer este script:#!/bin/bash
mount /dev/sda1 /mnt/memo
xnview -browse /mnt/memo/dcim/olymp100Con este script monto mi camara Olympus y luego abro el programa Xnview para visulizar las fotos, que estan dentro de la camara en la carpeta olymp100. Mi problema es que no se como hacer para que se desmonte la camara dentro del mismo script. Hasta ahora hice otro que es:
#!/bin/bash
umount /dev/sda1Pero quiero insertar alguna linea dentro del primero que me desmonte la camara cuando em Xnview se cierra. Alguien sabe como hacerlo??
Salu2!!! y gracias
P.D: Cuando monto un pendrive, la tercer linea del primer script la cambio por: nautilus /mnt/ss
-
Una pista para hacer lo del desmontaje:
ps -A | grep xnview
Así miras si el proceso xnview se está ejecutando. La cosa sería comprobarlo y si no se está ejecutando ese proceso desmontar el dispositivo.
-
No puedes poner el umount después de llamar al xnview??
En principio la ejecución se pararía al salir al ventana gráfica y al acabar la ejecución de xnview se ejecutaría la siguiente sentencia (el umount).
Si ves que falla, a lo mejor es porque el xnview no ha acabado del todo, por lo que poniendon un 'sleep X' el script esperará X segundos antes de continuar y ejecutar el umount. -
josefu, ¿como se haría de la otra manera que digo yo? Me interesa, así aprendo algo de scripting:p
¿Cómo puedo hacer una sentencia que lea la respuesta que da ps -A | grep proceso?
¿Conoces algun tutorial bueno sobre scripting? xD
-
josefu, ¿como se haría de la otra manera que digo yo? Me interesa, así aprendo algo de scripting:p
El problema es que así debería estar corriendo continuamente (por ejemplo dentro de un bucle infinito) y estar esperando hasta que la aplicación no este ejecutándose.
De todas maneras sería algo así:#!/bin/sh # unidad a desmontar MONTAJE="/mnt/usb" # aplicación a buscar APLICACION="xnview" # tiempo entre comprobaciones (en segundos) TIEMPO=30 while true; do VAR=`ps aux | grep -c $APLICACION` if [ $VAR -eq 0 ]; then umount $MONTAJE fi sleep $TIEMPO done ```Es un poco cutre, pero para que te hagas a la idea. > ¿Cómo puedo hacer una sentencia que lea la respuesta que da ps -A | grep proceso? Yo lo que suelo hacer es guardar la salida que me interesa en una variable (como en VAR), para ello ajustar tu salida a lo que quieres guardar, puedes usar cut, awk, tail, head, etc… > ¿Conoces algun tutorial bueno sobre scripting? xD Yo suelo consultar estos: [http://blackshell.usebox.net/pub/shell/taller_sh/](http://blackshell.usebox.net/pub/shell/taller_sh/) [http://structio.sourceforge.net/guias/AA_Linux_colegio/scripts-basicos-para-bash.html](http://structio.sourceforge.net/guias/AA_Linux_colegio/scripts-basicos-para-bash.html) [http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html](http://www.tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html) [http://www.insflug.org/detalle.php3?comoID=121](http://www.insflug.org/detalle.php3?comoID=121)
-
Bueno, gracias a Josefu por las cosas que me dijo, y gracias a Bluesman porque al menos trato de ayudarme. Esa idea del bucle se ma habia ocurrido, pero seria ejecutar una accion atras de otra. Imaginate 20 scripts uno a tras de otro ejecutando acciones. Puede que funcionen, pero mi P3 se va a morir rapido. Hoy a la noche lo pruebo en mi casa y mañana es cuento.
Salu2!!! y gracias
-
Si señor. Lo unico que puse fue una linea al final del primer script que desmontara, queda en espera y cuando salis del Xnview se desmonta. El sript quedo asi:
#!/bin/bash
mount /dev/sda1 /mnt/ss
xnview -browser /mnt/ss/dcim/olymp100
umount /dev/sda1Si tienen una camara, cambien por sus valores y listo,es muy bueno, simple pero bueno. Y se parece a win2, para los que dicen que Linux es mas dificil.
Salu2!!! y suerte
-
Gracias por la info josefu;)