por explorer » 2012-10-30 10:43 @488
Debes entender cómo estás haciendo la conexión: cuando estableces la conexión SSH, se abre un puerto de comunicaciones entre tu máquina y la máquina a donde te conectas. Esa conexión permite la ejecución de comandos que se van a ejecutar en la máquina destino. Pero no significa que los programas y procesos de tu máquina se puedan ejecutar en la máquina destino. Solo los que residan en ella.
Entonces, para saber el espacio libre en disco, necesitas acceder al sistema de archivos y conocer su estado. La forma más cómoda es ejecutando df de la propia máquina destino. Y solo se puede hacer en la propia máquina destino, así que sí: si que tienes que ejecutar un Bash, que lance y recoja el resultado de la ejecución.
No vale con lanzar un system() en tu programa Perl, porque solo se refiere a los comandos y programas de tu propia máquina. No vale con usar módulos de Perl, porque se están ejecutando en tu máquina, no en la de destino.
Otra cosa es que en la máquina destino instales un programa Perl que use esos módulos. Y otra cosa es que ejecutes un comando en la máquina destino, obtengas un resultado, y lo trates en tu programa, con esos módulos. Pero ya es el resultado.
Si la máquina destino no tiene el comando df, entonces debes obtener los datos desde la información que te devuelva el sistema gestor del sistema de archivos.
El resultado puede ser un texto que salga en pantalla, o un archivo que queda residente en la máquina destino y que luego recogerás, o abrir otro puerto (por el mismo SSH, por ejemplo), y transferir el resultado a algún programa que esté escuchando en tu máquina (que puede ser el mismo programa Perl que usa Net::SSH2, pero ahora no sé cómo se podría hacer. Tendrás que consultar su manual).
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES