<div dir="ltr"><div dir="ltr">Колеги, щиро всім дякую за консультації та поради.<input name="virtru-metadata" type="hidden" value="{"email-policy":{"state":"closed","expirationUnit":"days","disableCopyPaste":false,"disablePrint":false,"disableForwarding":false,"enableNoauth":false,"persistentProtection":false,"expandedWatermarking":false,"expires":false,"isManaged":false},"attachments":{},"compose-id":"1","compose-window":{"secure":false}}"><div><br></div><div><br></div></div><br><div class="gmail_quote" style=""><div dir="ltr" class="gmail_attr">чт, 11 лют. 2021 о 13:13 George L. Yermulnik <<a href="mailto:yz@yz.kiev.ua">yz@yz.kiev.ua</a>> пише:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hello!<br>
<br>
On Thu, 11 Feb 2021 at 10:16:50 (+0200), Oleh Hrynchuk wrote:<br>
<br>
> Маю ось результат виконання команди:<br>
<br>
> oleh@localhost:~$ curl -sSL "<a href="https://localhost:5000/v2/_catalog" rel="noreferrer" target="_blank">https://localhost:5000/v2/_catalog</a>" | jq -r<br>
> '.repositories[]' | xargs -n1 -I {} bash -c 'echo "$@"' _ {}<br>
> etx/for_audit<br>
[...]<br>
> oleh@localhost:~$<br>
<br>
Было бы удобнее увидеть выхлоп jq без последующего xargs, т.к. мне<br>
сильно кажется, что аргументы к xargs можно было бы минимизировать до<br>
простого "xargs -n1".<br>
<br></blockquote><div><div><br></div><div>Вивід команди "без xargs" абсолютно тотожний з xargs.</div><div><br></div><div>Справа в тому, що в оригінальному скрипті замість 'echo' стоїть доморощена функція `clear_repository` котра по одному чистить оті гілки docker registry, що передаються їй.</div><div><br></div><div>Тепер бачу, що реально там все ускладнено.</div><div>Дякую іще раз.</div><div><br></div><div><br></div><div></div></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> І не можу розібратися ДЕТАЛЬНО що робить наступний pipe цієї команда:<br>
<br>
> xargs -n1 -I {} bash -c 'echo "$@"' _ {}<br>
<br>
> Тобто, я по одному (xargs -n1) беру аргументи з STDOUT попереднього pipe<br>
> і.... і що далі?<br>
<br>
и по одному подставляем вместо {} в конец.<br>
<br>
> Також який зміст несуть два кінцеві елементи:   _  {} ?<br>
<br>
По порядку:<br>
-n1 -> брать по одному аргументу из stdin<br>
-I {} -> "запоминать" аргумент для многоразового использования (по умолчанию до 5 раз)<br>
bash -c 'echo "$@"' _ {} -> команда, которой аргумент передать<br>
        {} -> заменяется на тот самый аргумент, который "запомнили"<br>
        _  -> в данном контексте аля blank identifier в golang<br>
<br>
В целом команда выглядит, мягко говоря, переусложнённой.<br>
Всё, что она делает - это передаёт bash'у массив в виде одного<br>
аргумента, чтобы тот выполнил echo это массива. В текущем контексте, "_"<br>
можно считать плейсхолдером для опускания ненужного элемента, т.к.<br>
позиционные параметры в $@ (как и в $*) отсчитываются от первого, а не<br>
нулевого (нулевой - это который имя шелл-скрипта -> $0).<br>
<br>
Наглядный пример:<br>
$ bash -c 'echo "$0: $@"' i-am-the-zero-param 0 1 2 3<br>
i-am-the-zero-param: 0 1 2 3<br>
<br>
$ bash -c 'echo "$0: $@"' 0 1 2 3<br>
0: 1 2 3<br>
<br>
Т.е. по сути выполняется "xargs -n1", в котором echo выполняется по<br>
умолчанию, если команда не указана явно, и так же по умолчанию<br>
аргумент(ы) из stdin дописываются в конец выполняемой команды.<br>
<br>
Может, конечно, есть какая-то скрытая логика в переусложнении, но я её<br>
не увидел, так что всю конструкцию "-I {} bash -c 'echo "$@"' _ {}"<br>
можно смело купировать, оставив только "xargs -n1"<br>
<br>
-- <br>
George L. Yermulnik<br>
[YZ-RIPE]<br>
_______________________________________________<br>
uanog mailing list<br>
<a href="mailto:uanog@uanog.kiev.ua" target="_blank">uanog@uanog.kiev.ua</a><br>
<a href="https://mailman.uanog.kiev.ua/mailman/listinfo/uanog" rel="noreferrer" target="_blank">https://mailman.uanog.kiev.ua/mailman/listinfo/uanog</a></blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="gmail_signature"><div dir="ltr"><div>Regards,<br>/oleh hrynchuk</div></div></div></div>