[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [OT] Sobre script bash



El día 20 de junio de 2013 18:19, Julian Perconti
<vh1988@yahoo.com.ar> escribió:
> ----- Mensaje original -----
>> De: fernando sainz <fernandojose.sainz@gmail.com>
>> Para: "debian-user-spanish@lists.debian.org" <debian-user-spanish@lists.debian.org>
>> CC:
>> Enviado: jueves, 20 de junio de 2013 13:09
>> Asunto: Re: [OT] Sobre script bash
>>
>> El día 20 de junio de 2013 17:55, Julian Perconti
>> <vh1988@yahoo.com.ar> escribió:
>>>  ----- Mensaje original -----
>>>>  De: fernando sainz <fernandojose.sainz@gmail.com>
>>>>  Para: Julian Perconti <vh1988@yahoo.com.ar>
>>>>  CC:
>>>>  Enviado: jueves, 20 de junio de 2013 12:35
>>>>  Asunto: Re: [OT] Sobre script bash
>>>>
>>>>  El día 20 de junio de 2013 16:46, Julian Perconti
>>>>  <vh1988@yahoo.com.ar> escribió:
>>>>>   Saludos,
>>>>>   Tengo el siguiente script basico para migrar permisos:
>>>>>   # BOF
>>>>>   #!/bin/bash
>>>>>   j=0
>>>>>   echo "ID del GRUPO a buscar:"
>>>>>   read gida
>>>>>   echo "ID del GRUPO por el cual reemplazar a los que
>>>>>   se encuentren:"
>>>>>   read gidn
>>>>>   for i in `find $pwd -gid $gida -print0 | xargs -0 chgrp
>>>>
>>>>  ¿Este salto de linea lo ha hecho el correo supongo? así estaría mal.
>>>>
>>>>  veo algo extraño en el xargs, por defecto recibe cada valor devuelto
>>>>  por el find, no entiendo por que le pasas $i
>>>>
>>>>  S2.
>>>>
>>>>>   $gidn "$i"`; do
>>>>>           let j=j+1
>>>>>   done
>>>>>   echo $j 'reemplazos'
>>>>>   #EOF
>>>>
>>>>
>>>>
>>>>
>>>>>   En si el script, funciona bien, es decir, los permisos se
>>>>>   cambian según los id proporcionados; el problema es que me arroja
>> el
>>>>  siguiente
>>>>>   error:
>>>>>   chgrp: cannot access `': No such file or directory
>>>>>   Y el contador me da siempre 0.
>>>>>   Probé de escribirlo de formas distintas, por ejemplo
>>>>>   meter la salida en un tmp y luego cat tmp, etc..
>>>>>   Alguna idea?
>>>>>   Aclaro que no soy programador ni mucho menos, asique toda
>>>>>   sugerencia/critica/mejora es bienvenida!
>>>>>   Gracias de antemano!
>>>>>
>>>>>
>>>>>   --
>>>>>   To UNSUBSCRIBE, email to
>> debian-user-spanish-REQUEST@lists.debian.org
>>>>>   with a subject of "unsubscribe". Trouble? Contact
>>>>  listmaster@lists.debian.org
>>>>>   Archive:
>>>>
>> [🔎] 1371739576.91232.YahooMailNeo@web160205.mail.bf1.yahoo.com">http://lists.debian.org/[🔎] 1371739576.91232.YahooMailNeo@web160205.mail.bf1.yahoo.com
>>>>>
>>>>
>>>
>>>  Respondo a la lista:
>>>
>>>  Bueno efectivamente le saque "$i" y el error desapareció pero
>> sigue apareciendo otro:
>>>
>>>  chgrp: cannot dereference
>> `./.pulse/0494f201138428357ab0646c51ada1e2-runtime': No such file or
>> directory
>>>
>>>  Y la salida de sh -x: (antes de quitarle $i)
>>>
>>>  root@debian:/home/julian# sh -x migraperm
>>>  + j=0
>>>  + echo ID del GRUPO a buscar:
>>>  ID del GRUPO a buscar:
>>>  + read gida
>>>  1000
>>>  + echo ID del GRUPO por el cual reemplazar a los que se encuentren:
>>>  ID del GRUPO por el cual reemplazar a los que se encuentren:
>>>  + read gidn
>>>  0
>>>  + find -gid 1000 -print0
>>>  + xargs -0 chgrp 0
>>>  chgrp: cannot access `': No such file or directory
>>>  chgrp: cannot dereference
>> `./.pulse/0494f201138428357ab0646c51ada1e2-runtime': No such file or
>> directory
>>>  + echo 0 reemplazos
>>>  0 reemplazos
>>>
>>>  Sin embargo algo esta mal hecho y no me doy cuenta porque el contador sigue
>> dando 0:
>>>
>>>  root@debian:/home/julian# ./migraperm
>>>  ID del GRUPO a buscar:
>>>  0
>>>  ID del GRUPO por el cual reemplazar a los que se encuentren:
>>>  1000
>>>  0 reemplazos
>>>
>>>  El script quedó asi:
>>>
>>>  #!/bin/bash
>>>  j=0
>>>  echo "ID del GRUPO a buscar:"
>>>  read gida
>>>  echo "ID del GRUPO por el cual reemplazar a los que se
>> encuentren:"
>>>  read gidn
>>>
>>>  for i in `find $pwd -gid $gida -print0 | xargs -0 chgrp $gidn`;
>>>  do
>>>          let j=j+1
>>>  done
>>>  echo $j 'reemplazos'
>>>
>>>  Muchas gracias por sus prontas respuestas!
>>>
>>
>> Creo que es un error de concepto.
>> la salida del `find.....| xargs ...` va a estar vacía. Prueba a ejecutarlo solo.
>
> Es verdad Fernando, me estaba empezando a dar cuenta, aparentemente el let no se esta ejecutando porque el contador es 0 (creo que es eso)
>
> La salida de ejecutarlo solo devuelvo solo una línea de error de no 'No such file or directory'.
>
> Voy a buscar la forma de contar los elemento separadamente; de todas formas no es algo critico (el script ya cumple su función), solo me entusiasme un poco y quería imprimir en pantalla la cantidad de elementos modifiados.
>
>>
>> S2.
>
> Saludos!
>


Tu problema es que mezclas dos cosas, si se usa un pipe con xargs es
precisamente para evitar el bucle for.

Si usas el bucle for, quita el xargs y pon el chgp en el cuerpo del for.
S2.


Reply to: