1 votos

¿Por qué la sustitución de comandos no funciona entre llaves, pero reemplazarla con el número real funciona?

Estoy usando el siguiente comando para intentar maximizar el número de núcleos en mi servidor:

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

Por alguna razón, solo usa un núcleo, aunque mi servidor tenga dos. Si trato de reemplazar `nproc --all` con 2 , funciona bien. ¿Por qué está pasando esto?

2voto

Kamil Maciorowski Puntos 897

Llave de expansión que ocurre antes de la sustitución de comandos. Este fragmento

{1..`nproc --all`}

no será ampliado como refuerzo en todos. Cuando la sustitución de comandos se expande a 2, se convierte en

{1..2}

pero es demasiado tarde para llave de expansión de ahora. El mismo problema sería si se utiliza una variable de allí.


Esta sintaxis funciona:

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

o

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

Ajustar el bucle a sus necesidades. Nota: en el último caso usé $(…) en lugar de `…` debido a que esta forma de nidos fácilmente.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: