मैं एक उप-शेल बनाने या एक अस्थायी फ़ाइल का उपयोग किए बिना एक कमांड के आउटपुट पर लूप करना चाहता हूं।
मेरी स्क्रिप्ट का आरंभिक संस्करण इस तरह दिखता था, लेकिन यह तब से काम नहीं करता है जब यह एक सबस्क्रिप्शन बनाता है, और exit
कमांड मुख्य स्क्रिप्ट के बजाय सब्स्क्रिप्शन को समाप्त कर देता है जिसकी आवश्यकता होती है। यह नीति रूटिंग को कॉन्फ़िगर करने के लिए एक बहुत बड़ी स्क्रिप्ट का हिस्सा है, और यह निष्पादन को रोक देता है यदि यह एक ऐसी स्थिति का पता लगाता है जिससे रूटिंग विफल हो जाएगी।
sysctl -a 2>/dev/null | grep '\.rp_filter' | while read -r -a RPSTAT ; do
if [[ "0" != "${RPSTAT[2]}" ]] ; then
echo >&2 "RP Filter must be disabled on all interfaces!"
echo >&2 "The RP filter feature is incompatible with policy routing"
exit 1
fi
done
तो सुझाए गए विकल्पों में से एक है उपसमूह से बचने के लिए इस तरह से एक कमांड का उपयोग करना।
while read BLAH ; do echo $BLAH; done </root/regularfile
तो यह मुझे लगता है कि मुझे इस तरह की कमांड का उपयोग करने में सक्षम होना चाहिए ताकि वह सब-सब्सक्रिप्शन से बच सके और फिर भी मुझे जो प्रोग्राम चाहिए उससे आउटपुट मिल सके।
while read BLAH ; do echo $BLAH; done <(sysctl -a 2>/dev/null | grep '\.rp_filter')
दुर्भाग्य से, उस कमांड का उपयोग करने से इस त्रुटि का परिणाम मिलता है।
-bash: syntax error near unexpected token `<(sysct ...
मैं वास्तव में भ्रमित हो जाता हूं क्योंकि यह काम करता है।
cat <(sysctl -a 2>/dev/null | grep '\.rp_filter')
मैं उस कमांड के आउटपुट को एक अस्थायी फ़ाइल में सहेज सकता था, और अस्थायी फ़ाइल पर रीडायरेक्ट का उपयोग कर सकता था, लेकिन मैं ऐसा करने से बचना चाहता था।
तो क्यों पुनर्निर्देशन मुझे एक त्रुटि दे रहा है, और क्या मेरे पास कोई अन्य विकल्प है तो एक अस्थायी फ़ाइल बना रहा है?