Problema script ksh

Hola,
Tengo un problemilla con un script. A ver si me puedes echar una mano.
El código del script en el que tengo el problema es el siguiente:
while read NOMBRE_SCRIPT_BATCH AMPERSAND
do
rm $NOMBRE_SCRIPT_BATCH
done < /var/usu1/batch_17876
Mientras que el fichero batch_17876 contiene:
more batch_17876
/var/usu1/batch_PRUEBA2.ksh.'ops$tempdb'.VBD &
/var/usu1/batch_PRUEBA2.ksh.'ops$auxiliar'.VBD &
wait
Pues bien, al ejecutar el script obtengo:
rm: /var/usu1/batch_PRUEBA2.ksh.'ops$tempdb'.VBD non-existent
rm: /var/usu1/batch_PRUEBA2.ksh.'ops$auxiliar'.VBD non-existent
rm: wait non-existent
Y si hacemos un listado del directorio vemos lo siguiente:
ls
batch_17876
batch_PRUEBA2.ksh.ops$tempdb.VBD
batch_PRUEBA2.ksh.ops$auxiliar.VBD
De modo que el problema se produce por esas comillas simples.
Pero si en lugar de realizar el rm dentro del bucle lo intento borrar directamente, sí que lo borra ¿?
VAR=/var/usu1/batch_PRUEBA2.ksh.'ops$tempdb'.VBD
rm $VAR
¿Sabes por qué se produce esta situación o cómo puedo solucionarla?
Este script lo estoy desarrollando en ksh y en un servidor HP-UX.
Muchas gracias y un saludo,
jlbarr
Respuesta
1
Si en el fichero /var/usu1/batch_17876 tienes los nombres de los ficheros a borrar sin el & del final ni las comillas simples, es decir:
/var/usu1/batch_PRUEBA2.ksh.ops$tempdb.VBD
/var/usu1/batch_PRUEBA2.ksh.ops$auxiliar.VBD
(Sin el wait; este falla porque tal fichero no existe),
el bucle while siguiente funciona perfectamente:
while read NOMBRE_SCRIPT_BATCH
do
rm $NOMBRE_SCRIPT_BATCH
done < /var/usu1/batch_17876
Lo de AMPERSAND al final de la línea while ¿Para qué es?
Lo he probado y funciona bien.
Pruébalo tú y me cuentas.
Al hacerlo por línea de comandos te funciona porque "escapeas" (es decir, deja de tener significado especial) el símbolo $ con las comillas simples
Hola,
En primer lugar muchas gracias por tu respuesta. Sabía que el problema se debía a las comillas, pero no sabía por qué se producía dicho problema.
El AMPERSAND al final del while lo utilizo para que "NOMBRE_SCRIPT_BATCH" recoja el nombre del fichero y "AMPERSAND" recoja el carácter "&", de modo que al borrar los ficheros no me diga que el fichero & no existe.
Muchas gracias y un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas