1

Я использую следующую команду, чтобы попытаться максимально увеличить количество ядер на моем сервере:

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

По какой-то причине он использует только одно ядро, хотя на моем сервере их два. Если я попытаюсь заменить `nproc --all` на 2 , он будет работать нормально. Почему это происходит?

1 ответ1

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

Отрегулируйте цикл в соответствии с вашими потребностями. Обратите внимание, что в последнем случае я использовал $(…) вместо `…` потому что эта форма легко вкладывается.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .