mlesir
19/12/13, 18:34:48
EDITADO A 30/01/2014:
Todo este hilo se centra en poder saber con Tasker que archivo esta abierto en una determinada ruta. Tasker no lo puede saber sólo es capaz de decirte que se ha abierto determinada carpeta o archivo, pero dentro de un directorio si quieres saber cúal es el archivo exacto que esta abierto sólo se puede con script y usando comandos. Pues después de pelearme con esto mucho tiempo esto es lo que he conseguido saber, os lo dejo aquí por si a alguien le puede ser de utilidad o puede hacer avanzar este tema:
1- Accion de Tasker Ejecutar Consola: lsof "ruta del archivo (ojo, empezando por "/")
En mi caso no funcionó nunca. Me aparecian todos los archivos abiertos, es como si ignorase lo de la ruta.
2- lsof | grep tasker
Funciona a medias porque si es verdad que me da un listado restringido sólo a lo que ha abierto Tasker pero no me da el nombre de los archivos.
3- Algunos archivos en realidad no se quedan abiertos:
Por ejemplo Tasker cuando se abre la ayuda carga los datos del archivo html en la webview y lo cierra. No es como los tipicos archivos de texto que abres con un procesador de texto y que mientras los tienes abiertos estan abiertos. Igualmente sospecho que algunas apps incluso con archivos de texto se traen la información y luego los cierran.
4- basename "$(lsof -p $(pidof mediaserver) | grep -m 1 mp3)" .mp3
Este si funciona. Pero lo hace con el archivo de música que este abierto (reproduciendo)
5 ls -u "ruta del archivo":
.Esto lo que te da es un listado (comando ls) ordenado por fecha de último acceso (opción -u). En ppo todos estos comandos o binarios los tendrás instalados en la carpeta bin. Dependiendo del movil, Rom etc, tendras algunos, otros no, y aunque tengas un comando o binario puede que no tengas todas las opciones. En mi caso no tenía la opción -u para el comando ls. Pero como instale busybox (que en realidad lo que hace es instalarte unos binarios, los suyos de busybox) si que ahi tenía esa opción. Si abres busybox y les das a applanet te da un listado de todos los comandos que trae con sus opciones.
6 busybox ls -u /la/ruta/del/directorio | head -1
Me funcionó ( luego cuento el pero). Para poder utilizar el binario de busybox y no el que trae el móvil. Ademas con head 1 (o 2,o 3...) le dices cuantos resultados quieres que te de. Con uno te dará el último archivo abierto, con dos el último y el penultimo, etc.
Por lo que creo si en vez de "busybox" pones una ruta entonces ejecutara el binario de esa ruta. Por ejemplo podrías ejecutar el sqlite del plugin whatstasker en vez de otro si es que por lo que sea te interesa hacerlo asi.
El pero ( que creo que Maid se lo olió) es que el sistema de archivos esta montado para que no cambie la fecha de acceso mas que cuando es superior a la de modificación. Esto quiere decir que si accedo a un archivo mas de una vez sólo guardará la fecha de acceso primera el resto no. Esto al parecer lo hace por razones de economía de proceso, para ahorrar tiempo. Esto quiza se podría cambiar pero tendría creo que hacerse una partición del sistema, etc, Total muy por encima de mis capacidades.
7- stat -c "%X /ruta/del/archivo"
Esta te da el tiempo en el que se abrió por ultima vez ese archivo.
8 Con el comando touch (perdón por no poner el script completo pero ahora no lo encuentro)
Pues bien con este comando usando una de sus opciones puedes actualizar la fecha de acceso y ponerle la que quieras. Como si quieres poner que se accedio en 1945! Esto en ppo haría que si y sólo si te aseguras de que la carpeta sólo se va a abrir de manera que la puedas controlar SI puedes saber qué archivo está abierto. Se trataría de usar un contexto de archivo abierto de Tasker. Tarea de entrada
1-Ejecutar consola el comando ls que nos dirá que archivo ha sido el ultimo en abrirse.
2-Actualizar la fecha de acceso con touch.
Al final lo conseguí (gracias a Maid y Soymicmic) pero a medias. Además en este caso no vale porque los archivos de ayuda de Tasker no puedo controlar si se abren o no. Es decir se podría pero me parece que no es aceptable que Tasker este continuamente chequeando cuando se abre una carpeta, listando y cambiando la fecha, al menos para mi. O sea que sigo sin poder saber qué ayuda se esta consultando en Tasker. Por supuesto con %WIN o con el script para saber que pantalla se esta mostrando ni de broma porque Pent no le puso titulo específico a cada ayuda.
Si que he descubierto una cosa que quizás te pueda interesar Maid aunque creo que ya lo sabrás. Tasker no se detecta asi mismo a través de %WIN pero una apk hecha con Factory si.
Bueno creo que no me dejo nada, ah bueno si deciros por último que con touch puedes crear archivos cosa que no se puede con Tasker (sólo deja Directorios). Y que la verdad lo de los comandos linux hay que perderle el miedo, no es tan difícil. Es sólo cuestión de googlear e ir probando. A este respecto yo prefiero hacerlo desde un emulador de terminal pq si falla te da información de que pasa, Tasker se limita a decirte que ha habido un error.
AQUÍ EMPIEZA EL HILO ORIGINAL EN EL SE EXPLICAN MAS DETALLADAMENTE ALGUNAS DE LAS COSAS QUE HE EXPUESTO
-----------------------------------------------------------------------------------------------------------------------------------------------------
Pues estoy probando con lsof y grep pero no hay. manera. Creo que estoy cerca pero no lo acabo de conseguir.
Poniendo esto en ejecutar consola:
lsof | grep /mnt/sdcard/Tasker... Etc el resto de la ruta al directorio del que quiero saber que archivo esta abierto.
Consigo que me devuelva un resultado donde se puede leer la ruta pero no pone el nombre del archivo específico.
Si pongo esto:
lsof /mnt/sdcard......
Me pasa lo mismo que si pongo solo lsof.. me devuelve toda la lista.
A ver si alguno que sepa de Linux me puede decir como hacerlo. Gracias.
Todo este hilo se centra en poder saber con Tasker que archivo esta abierto en una determinada ruta. Tasker no lo puede saber sólo es capaz de decirte que se ha abierto determinada carpeta o archivo, pero dentro de un directorio si quieres saber cúal es el archivo exacto que esta abierto sólo se puede con script y usando comandos. Pues después de pelearme con esto mucho tiempo esto es lo que he conseguido saber, os lo dejo aquí por si a alguien le puede ser de utilidad o puede hacer avanzar este tema:
1- Accion de Tasker Ejecutar Consola: lsof "ruta del archivo (ojo, empezando por "/")
En mi caso no funcionó nunca. Me aparecian todos los archivos abiertos, es como si ignorase lo de la ruta.
2- lsof | grep tasker
Funciona a medias porque si es verdad que me da un listado restringido sólo a lo que ha abierto Tasker pero no me da el nombre de los archivos.
3- Algunos archivos en realidad no se quedan abiertos:
Por ejemplo Tasker cuando se abre la ayuda carga los datos del archivo html en la webview y lo cierra. No es como los tipicos archivos de texto que abres con un procesador de texto y que mientras los tienes abiertos estan abiertos. Igualmente sospecho que algunas apps incluso con archivos de texto se traen la información y luego los cierran.
4- basename "$(lsof -p $(pidof mediaserver) | grep -m 1 mp3)" .mp3
Este si funciona. Pero lo hace con el archivo de música que este abierto (reproduciendo)
5 ls -u "ruta del archivo":
.Esto lo que te da es un listado (comando ls) ordenado por fecha de último acceso (opción -u). En ppo todos estos comandos o binarios los tendrás instalados en la carpeta bin. Dependiendo del movil, Rom etc, tendras algunos, otros no, y aunque tengas un comando o binario puede que no tengas todas las opciones. En mi caso no tenía la opción -u para el comando ls. Pero como instale busybox (que en realidad lo que hace es instalarte unos binarios, los suyos de busybox) si que ahi tenía esa opción. Si abres busybox y les das a applanet te da un listado de todos los comandos que trae con sus opciones.
6 busybox ls -u /la/ruta/del/directorio | head -1
Me funcionó ( luego cuento el pero). Para poder utilizar el binario de busybox y no el que trae el móvil. Ademas con head 1 (o 2,o 3...) le dices cuantos resultados quieres que te de. Con uno te dará el último archivo abierto, con dos el último y el penultimo, etc.
Por lo que creo si en vez de "busybox" pones una ruta entonces ejecutara el binario de esa ruta. Por ejemplo podrías ejecutar el sqlite del plugin whatstasker en vez de otro si es que por lo que sea te interesa hacerlo asi.
El pero ( que creo que Maid se lo olió) es que el sistema de archivos esta montado para que no cambie la fecha de acceso mas que cuando es superior a la de modificación. Esto quiere decir que si accedo a un archivo mas de una vez sólo guardará la fecha de acceso primera el resto no. Esto al parecer lo hace por razones de economía de proceso, para ahorrar tiempo. Esto quiza se podría cambiar pero tendría creo que hacerse una partición del sistema, etc, Total muy por encima de mis capacidades.
7- stat -c "%X /ruta/del/archivo"
Esta te da el tiempo en el que se abrió por ultima vez ese archivo.
8 Con el comando touch (perdón por no poner el script completo pero ahora no lo encuentro)
Pues bien con este comando usando una de sus opciones puedes actualizar la fecha de acceso y ponerle la que quieras. Como si quieres poner que se accedio en 1945! Esto en ppo haría que si y sólo si te aseguras de que la carpeta sólo se va a abrir de manera que la puedas controlar SI puedes saber qué archivo está abierto. Se trataría de usar un contexto de archivo abierto de Tasker. Tarea de entrada
1-Ejecutar consola el comando ls que nos dirá que archivo ha sido el ultimo en abrirse.
2-Actualizar la fecha de acceso con touch.
Al final lo conseguí (gracias a Maid y Soymicmic) pero a medias. Además en este caso no vale porque los archivos de ayuda de Tasker no puedo controlar si se abren o no. Es decir se podría pero me parece que no es aceptable que Tasker este continuamente chequeando cuando se abre una carpeta, listando y cambiando la fecha, al menos para mi. O sea que sigo sin poder saber qué ayuda se esta consultando en Tasker. Por supuesto con %WIN o con el script para saber que pantalla se esta mostrando ni de broma porque Pent no le puso titulo específico a cada ayuda.
Si que he descubierto una cosa que quizás te pueda interesar Maid aunque creo que ya lo sabrás. Tasker no se detecta asi mismo a través de %WIN pero una apk hecha con Factory si.
Bueno creo que no me dejo nada, ah bueno si deciros por último que con touch puedes crear archivos cosa que no se puede con Tasker (sólo deja Directorios). Y que la verdad lo de los comandos linux hay que perderle el miedo, no es tan difícil. Es sólo cuestión de googlear e ir probando. A este respecto yo prefiero hacerlo desde un emulador de terminal pq si falla te da información de que pasa, Tasker se limita a decirte que ha habido un error.
AQUÍ EMPIEZA EL HILO ORIGINAL EN EL SE EXPLICAN MAS DETALLADAMENTE ALGUNAS DE LAS COSAS QUE HE EXPUESTO
-----------------------------------------------------------------------------------------------------------------------------------------------------
Pues estoy probando con lsof y grep pero no hay. manera. Creo que estoy cerca pero no lo acabo de conseguir.
Poniendo esto en ejecutar consola:
lsof | grep /mnt/sdcard/Tasker... Etc el resto de la ruta al directorio del que quiero saber que archivo esta abierto.
Consigo que me devuelva un resultado donde se puede leer la ruta pero no pone el nombre del archivo específico.
Si pongo esto:
lsof /mnt/sdcard......
Me pasa lo mismo que si pongo solo lsof.. me devuelve toda la lista.
A ver si alguno que sepa de Linux me puede decir como hacerlo. Gracias.