Дяденька, не ебите себе мозг, берите цикл for и извращайтесь как вам таки надо. Ты вполне можешь победить xargs в своей ОС, только чтобы когда такой финт понадобится в следующий раз в другом месте узнать что с местной реализаций xargs так не работает. For в баше одинакого работает везде. xargs - хорошо, когда надо по быстрому запустить 50 копий процесса одновременно или там просто что-то сделать. Как только задача усложняется и команда требует перенаправления при динамических входных параметрах - время доставать for Самое главное, что потом при просмотре хистори чужими людьми ни у кого инфаркта не будет.
Кстати еще одно эмпирическое правило: если скрипт на баше уже больше двух экранов текста и еще не закончен - время его переписывать на питоне.
Если так уж хочется извратиться с xargs и число аргументов гарантированно не меньше единицы, то можно сделать while true; do echo "5"; done | xargs -P 2 -n 3 /bin/bash -c '/bin/sleep $0 $* | cat >somefile' Если аргумента не будет, то $0 отрезолвится в /bin/bash. Но, как правильно заметил предыдущий оратор. xargs -- вещь на любителя, и "взять три строчки из файла начиная с энной" можно sed'ом, awk'ом или даже head + tail.
Но я вышел из положения, рекурсивно вызывая тот же самый скрипт с параметром, наличие которого проверяю сразу при старте. Так даже удобнее. Всё получилось в точности как я и хотел.
А xargs мне нравится. В основном я его начал применять ради многопоточной обработки большого (очень большого) массива входящих файлов.
Comments 5
Reply
Ты вполне можешь победить xargs в своей ОС, только чтобы когда такой финт понадобится в следующий раз в другом месте узнать что с местной реализаций xargs так не работает.
For в баше одинакого работает везде.
xargs - хорошо, когда надо по быстрому запустить 50 копий процесса одновременно или там просто что-то сделать.
Как только задача усложняется и команда требует перенаправления при динамических входных параметрах - время доставать for
Самое главное, что потом при просмотре хистори чужими людьми ни у кого инфаркта не будет.
Кстати еще одно эмпирическое правило: если скрипт на баше уже больше двух экранов текста и еще не закончен - время его переписывать на питоне.
Reply
Reply
while true; do echo "5"; done | xargs -P 2 -n 3 /bin/bash -c '/bin/sleep $0 $* | cat >somefile'
Если аргумента не будет, то $0 отрезолвится в /bin/bash.
Но, как правильно заметил предыдущий оратор. xargs -- вещь на любителя, и "взять три строчки из файла начиная с энной" можно sed'ом, awk'ом или даже head + tail.
Reply
Но я вышел из положения, рекурсивно вызывая тот же самый скрипт с параметром, наличие которого проверяю сразу при старте. Так даже удобнее. Всё получилось в точности как я и хотел.
А xargs мне нравится. В основном я его начал применять ради многопоточной обработки большого (очень большого) массива входящих файлов.
Reply
Leave a comment