Чому заміщення команд не працює у фігурних дужках, а замінює її фактичною кількістю робіт?


1

Я використовую таку команду, щоб спробувати досягти максимальної кількості ядер на моєму сервері:

for i in {1..`nproc --all`}; do while : ; do : ; done & done

З якоїсь причини він використовує лише одне ядро, навіть якщо мій сервер має два. Якщо я намагаюся замінити `nproc --all` с 2, він працює нормально. Чому це відбувається?

Відповіді:


2

Розширення дужки відбувається перед заміною команди. Цей фрагмент

{1..`nproc --all`}

не буде розширено як фігурна дужка взагалі. При зміні команди розширення до 2, це стає

{1..2}

але вже занадто пізно для розширення дужки зараз. Така ж проблема була б якщо ви використовували змінну .


Цей синтаксис працює:

for ((i=1; i<=`nproc --all`; i++)); do echo "$i"; done

або

for i in $(seq 1 "$(nproc --all)"); do echo "$i"; done

Налаштуйте контур для ваших потреб. Зверніть увагу, що в останньому випадку я використав $(…) замість `…` оскільки ця форма легко гніздиться .


Це відмінно працювало, спасибі!
AndreasKralj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.