कमांड प्रतिस्थापन ब्रेसिज़ में काम क्यों नहीं करता है, लेकिन वास्तविक संख्या कार्यों के साथ इसे प्रतिस्थापित करता है?


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

अपनी आवश्यकताओं के लिए लूप समायोजित करें। अंतिम केस में ध्यान दें क्योंकि मैंने इसका उपयोग $(…)किया था `…`क्योंकि यह फ़ॉर्म आसानी से घोंसला बनाता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.