kpartx en un bucle bash

Estoy tratando de ejecutar las siguientes líneas dentro de un script bash:

for i in `ls  /dev/kvm-space/*-backup`
do 
 kpartx -dv "$i"
done

Pero el guión no funciona como se esperaba. La salida se ve así:

failed to stat() /dev/kvm-space/sp-test.disk-backup
failed to stat() /dev/kvm-space/sp-web.disk-backup
failed to stat() /dev/kvm-space/tp-web.disk-backup

Cuando intento ejecutar el comando kpartx con una ruta de la salida anterior manualmente, kpartx funciona como se esperaba.

¿Alguien tiene una idea de lo que va mal?

Saludos cordiales Thomas

Edit: Estoy usando Debian Squeeze y la versión 0.4.8 de kpartx proporcionada a través de apt.

preguntado el 27 de agosto de 11 a las 23:08

Esto no parece muy probable, dado su código, pero compruebe su .bashrc para cualquier cosa como un alias o función que kpartx necesitaría estar disponible para ejecutarse. Esas cosas no están disponibles en un script. -

El mensaje de error no es tan útil como debería ser; nos dice que el problema ocurrió cuando el programa usó el stat() llamada al sistema, pero no indica cuál fue la falla, o el nombre del comando que encontró el problema. (Incluso puede informar de eso como un error al kpartx desarrolladores.) Todos los tipos habituales de explicaciones (problemas de permisos, etc.) no satisfacen; si el caparazón y ls logró generar los nombres de los archivos, no hay razón por la cual kpartx tampoco pudo acceder al archivo, especialmente porque dice que funciona cuando se ejecuta manualmente. Estas corriendo como root ¿en absoluto? -

Tenga en cuenta que ls es redundante; simplemente podrías usar for i in /dev/kvm-space/*-backup sin ningún problema (extra). No ha jugado con la variable IFS, ¿verdad? -

Gracias, Jonathan, tu sugerencia sin el comando ls es genial. El lazo for i in /dev/kvm-space/*-backup funciona bastante bien, pero en realidad no es una solución. Además, no tengo idea de por qué el bucle con ls no funciona. -

@ ding280: ¿Estás diciendo que funciona después de eliminar lo innecesario? ls ¿invocación? FYI, haciendo cualquier cosa con la salida de ls no se recomienda (excepto leerlo con los ojos). -

1 Respuestas

Considere aislar el problema utilizando la siguiente técnica:

for i in `ls  /dev/kvm-space/*-backup`
do 
    echo kpartx -dv "$i"
done

Si su salida coincide con lo que hubiera esperado que Bash invocara por usted, entonces el problema realmente radica en kpartx. Sospecho que sí.

Respondido 20 Oct 11, 07:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.