मैं यह करने के लिए कोई फ़ाइल या नहीं करने के लिए stdin पुनर्निर्देशित करने के लिए तय करने के लिए कोशिश कर रहा था में अनुप्रेषित:बैश: मानक इनपुट गतिशील रूप से एक स्क्रिप्ट
[ ...some condition here... ] && input=$fileName || input="&0"
./myScript < $input
लेकिन वह काम नहीं करता चर $ इनपुट है जब क्योंकि "& 0", बैश इसे फ़ाइल नाम के रूप में व्याख्या करता है।
हालांकि, मैं अभी कर सकता है:
if [ ...condition... ];then
./myScript <$fileName
else
./myScript
समस्या यह है कि ./myScript वास्तव में एक लंबा आदेश पंक्ति है कि मैं नकल नहीं करना चाहती है, और न ही मैं इसके लिए एक समारोह बनाने के लिए करना चाहते हैं क्योंकि यह इतना लंबा नहीं है (यह इसके लायक नहीं है)।
तो यह मेरे लिए हुआ यह करने के लिए:
[ ...condition... ] && input=$fileName || input= #empty
cat $input | ./myScript
लेकिन वह एक और आदेश और एक पाइप (अर्थात एक subshell) को चलाने के लिए की आवश्यकता है।
क्या कोई और तरीका है जो सरल और अधिक कुशल है?
यह हमेशा कार्यों बनाने के लायक है। –
कभी भी "हमेशा" न कहें। कार्य एक अमूर्तता का स्तर जोड़ते हैं जो हमेशा वांछनीय नहीं होता है। – GetFree
शायद। इस मामले में मुझे लगता है कि यह वांछनीय है। –