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


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.