Вы можете использовать systemd-ask-password
для назначения пароля переменной bash.
Пример
password=$(systemd-ask-password --echo "machinectl password: ")
machinectl login {{ user }} $password
machinectl shell {{ your command }}
Как пользователь root, вы можете использовать machinectl --no-ask-password
. Из документации:
--no-ask-password
Do not query the user for authentication for privileged operations.
https://www.freedesktop.org/software/systemd/man/systemd-ask-password.htmlhttps://www.freedesktop.org/software/systemd/man/machinectl.html
Если вы можете заменить xargs
на GNU parallel
, этот действительно предоставляет строку замены {#}
, содержащую выполняемый порядковый номер.
Так например дано
$ touch File{001..050}.jpg
, затем
$ printf '%s\0' *.jpg | parallel --null -n 5 echo convert {} -o output{#}.pdf
convert File001.jpg File002.jpg File003.jpg File004.jpg File005.jpg -o output1.pdf
convert File006.jpg File007.jpg File008.jpg File009.jpg File010.jpg -o output2.pdf
convert File011.jpg File012.jpg File013.jpg File014.jpg File015.jpg -o output3.pdf
convert File016.jpg File017.jpg File018.jpg File019.jpg File020.jpg -o output4.pdf
convert File021.jpg File022.jpg File023.jpg File024.jpg File025.jpg -o output5.pdf
convert File026.jpg File027.jpg File028.jpg File029.jpg File030.jpg -o output6.pdf
convert File031.jpg File032.jpg File033.jpg File034.jpg File035.jpg -o output7.pdf
convert File036.jpg File037.jpg File038.jpg File039.jpg File040.jpg -o output8.pdf
convert File041.jpg File042.jpg File043.jpg File044.jpg File045.jpg -o output9.pdf
convert File046.jpg File047.jpg File048.jpg File049.jpg File050.jpg -o output10.pdf
xargs не предоставляет способ подсчета текущего экземпляра. Вы можете выполнить ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" output-$$.pdf'
, чтобы получить разные имена, но тогда вам придется определять порядок на основе временной метки файла.
Решением было бы постепенное их объединение:
ls *.jpg | xargs -d $'\n' -t -n 100 bash -c 'convert "$@" temp.pdf'; if [ -f output.pdf ]; then mv temp.pdf next.pdf; pdftk output.pdf next.pdf cat output temp.pdf; fi; mv temp.pdf output.pdf`
Хотя я думаю, что лучшим способом для этого было бы просто конвертировать каждое изображение по отдельности:
find -name \*.jpg -exec convert \{\} \{\}.pdf \;
pdftk *.jpg.pdf cat output output.pdf
Это проще, и затраты на преобразование каждого изображения в отдельном процессе будут примерно эквивалентны одному экземпляру преобразования, обрабатывающему N из них.
Кроме того, если случается так, что одно из изображений на самом деле не упорядочено, его проще переупорядочить, чем заново преобразовывать каждое изображение, поскольку пакеты теперь изменились.