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: