macOS हाई सिएरा, 10.13.3 (17D102)
- अगर मैं टर्मिनल में चलता हूं
sysctl -n hw.memsize
यह ठीक काम करता है, मुझे एक नंबर मिलता है - अगर मैं दौड़ता हूँ
which sysctl
मुझे मिला/usr/sbin/sysctl
जो सही लगता है
शेल स्क्रिप्ट से एक ही कमांड कैसे चलाएं? क्रॉस-ओएस समाधान की तलाश में। हर जगह शुद्ध श का उपयोग करना।
मैंने कोशिश की है:
#!/bin/sh
$("sysctl -n hw.memsize")
exit 1
1 परिणाम : पंक्ति 2: sysctl -n hw.memsize: कमांड नहीं मिली
#!/bin/sh
$("/usr/sbin/sysctl -n hw.memsize")
exit 1
2 परिणाम : पंक्ति 2: / usr / sbin / sysctl -n hw.memsize: ऐसी कोई फ़ाइल या निर्देशिका नहीं
#!/bin/sh
echo `sysctl -n hw.memsize`
exit 1
3 परिणाम : लाइन 2: 17179869184: कमांड नहीं मिला
निश्चित नहीं कि सही आउटपुट के बाद कमांड क्यों नहीं मिली।
#!/bin/sh
eval "sysctl -n hw.memsize"
exit 1
4 परिणाम : टर्मिनल में चलने के समान: 17179869184 लेकिन मैं eval से बचना चाहता हूँ।
जबकि चौथा उम्मीद के मुताबिक काम करता है, यह eval का उपयोग करता है और मैं इससे बचने की कोशिश करता हूं। 3rd लगभग सही लगता है और निश्चित नहीं है कि 2nd ऐसा क्यों नहीं कहता है जबकि यह मौजूद है।
sh स्क्रिप्ट फ़ाइल में + x chmod है।
$(...)
। यह पूरे उद्धृत स्ट्रिंग को कमांड के नाम के रूप में चलाने के लिए व्यवहार कर रहा है, क्योंकि, ठीक है, यही उद्धरण का मतलब है। यहाँ आपको जरूरत भी नहीं है$(...)
हालाँकि, यदि आप एक सब-कमांड में कमांड चलाना चाहते हैं और एक स्ट्रिंग के रूप में इसके स्टडआउट को प्राप्त करना चाहते हैं