मेरे पास एक फ़ाइल में निम्नलिखित कोड है जो zsh और bash दोनों द्वारा सोर्स किया गया है।
if test $SHELLNAME = zsh ; then
lss() { l -l ${1:-.}/*(s,S,t); }
laf() { l ${1:-.}/.*(.); }
lad() { l -d ${1:-.}/.*(/); }
lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }
fi
SHELLNAME
है zsh
अगर खोल zsh है और bash
अगर खोल bash है।
उपरोक्त प्रत्येक फ़ंक्शन में कोड होता है जो zsh के साथ काम करता है, लेकिन बैश नहीं।
जब मैं इस फ़ाइल को स्रोत करता हूं, तो मुझे निम्नलिखित त्रुटियां प्राप्त होती हैं।
bash: <filename>: line 67: syntax error near unexpected token `('
bash: <filename>: line 67: ` lss() { l -l ${1:-.}/*(s,S,t); }'
फिलहाल, मैं eval
बैश के सिंटैक्स चेकिंग को बायपास करने के लिए उपयोग कर रहा हूं ।
if test $SHELLNAME = zsh ; then
# Using eval makes sure bash can't try to syntax-check these functions.
eval 'lss() { l -l ${1:-.}/*(s,S,t); }'
eval 'laf() { l ${1:-.}/.*(.); }'
eval 'lad() { l -d ${1:-.}/.*(/); }'
eval 'lsw() { l -ld ${1:-.}/.*(R,W,X.^ND/); }'
fi
क्या इस समस्या का कोई बेहतर समाधान है? (शायद एक है कि उपयोग नहीं करता है eval
)