बैश: overridding ls -la with ls -la | अधिक (बेसिक स्क्रिप्टिंग समस्या)


0

स्क्रिप्टिंग को कोसने के लिए बहुत नया। Ls -la कमांड की सवारी करने की कोशिश की जा रही है: ls -la | अधिक

(मेरे लिए अधिक उपयोगी लगता है)।

मैंने इसे अपने अंत में जोड़ा .bashrc

154 # alias 'ls -la'='ls -la | more'
155         # this did not work because aliases
156         # are not allowed to have spaces in
157         # them. => have to make function:
158 ls() {
159         if [[ $@ == "-la" ]];
160         then
161                echo "test";
162                 command ls -la | more;
163         else
164                 command ls "$@";
165         fi;
166 }

लेकिन मुझे यह त्रुटि तब मिली जब मैंने एक नया टर्मिनल खोला:

bash: /users/me/.bashrc: line 158: syntax error near unexpected token `('
bash: /users/me/.bashrc: line 158: `ls() {'

जब मैं जोड़ता हूं functionकि ls() {कोई शिकायत नहीं है, लेकिन एलएस व्यवहार में कोई बदलाव नहीं है। धन्यवाद।

अपडेट करें

इस मुद्दे को कम करने की कोशिश कर रहा हूं:

159 ls() {
160         #if [[ $@ == "-la" ]];
161        # then
162                echo "test"
163 #               command ls -la | grep vim;
164         #else
165         #        command ls "$@";
166         #fi;
167 }

लेकिन मुझे अभी भी वही त्रुटि मिलती है। मुझे लगता है कि मुख्य समस्या यह हो सकती है कि यह bashrc फाइल में है?

अपडेट करें

अजीब तरह से यह काम करता है

159 function ls() {
160         #if [[ $@ == "-la" ]];
161        # then
162                echo "test"
163 #               command ls -la | grep vim;
164         #else
165         #        command ls "$@";
166         #fi;
167 }

जवाबों:


1

मैं Solaris 10 या Cygwin पर बैश-3.00.16 पर इसे पुन: पेश नहीं कर सकता, लेकिन ऐसा लगता है कि आपका बैश lsकमांड के एक आह्वान के रूप में लाइन 158 को पार्स कर रहा है , और फ़ंक्शन परिभाषा के रूप में नहीं।

"फ़ंक्शन" उपसर्ग वैकल्पिक है, लेकिन अगर यह आपके बैश को परिभाषा को स्वीकार करता है, तो यह एक उचित समाधान है। यह किसी भी तरह से फ़ंक्शन के अर्थ को बदल नहीं सकता है।

संयोग से, आप किस ओएस और बैश संस्करण का उपयोग कर रहे हैं?

uname -a
bash --version

आप के रूप में एक ही बैश के साथ चल रहा है Solaris 10। मेरी धारणा यह थी कि यह केवल रिक्त स्थान या कुछ ऐसा ही था। या शायद कोष्ठक। क्या आपने मेरे कोड की सीधी कॉपी-पेस्ट की? और यह काम किया? सहायता के लिए धन्यवाद!
साठफुटेर्सड्यूड

1
हां, मैंने इसे कॉपी किया और इसे अपने .bashrc में ठीक से चिपका दिया, लाइन नंबर हटा दिए और कोई त्रुटि नहीं हुई।
njd

बहुत अजीब .. कोई अंदाजा नहीं कि त्रुटि क्या बताती है?
साठफुटेरसूड

ठीक है कि अब ज्यादातर काम कर रहा है। यदि कथन कभी आपके लिए सत्य का मूल्यांकन करता है? Ie: ls -la | moreकभी किया था ?
साठफुटेरसूड

हा! मेरे पास एक उपनाम है जो ls लेता है और इसे ls -F में मैप करता है और जो चीजों को गड़बड़ कर रहा है। समस्या सुलझ गयी।
साठफुटेरसुडे

4

मुझे लगता है कि यह वही नहीं है जिसके बारे में आप पूछ रहे हैं, लेकिन मैं इस मामले में इसका उल्लेख करता हूं कि आपने इस तरह के समाधान के बारे में नहीं सोचा है। मेरे अनुभव में, इसके चारों ओर काम करने का सामान्य तरीका एक स्थान के बिना एक उपनाम बनाना है, जैसे:

alias llm="ls -la | more"

यह एक स्क्रिप्ट लिखने की तुलना में बहुत तेज और आसान है। FWIW, मैंने बैश 3.0 पर चलने वाले FreeBSD 5.3 सिस्टम पर यह परीक्षण किया और इसने अधिक के माध्यम से एक लिस्टिंग रन प्रदान किया।


टिप्पणी के लिए धन्यवाद। उस के बारे में सोचा लेकिन स्क्रिप्ट समाधान पसंद करते हैं।
साठफुटेर्सडूड

1

से बदलो:

 समारोह एल.एस.
 {
         अगर [[$ @ == "-ला"]]
         फिर
                गूंज "परीक्षण"
                / बिन / एलएस -ला | अधिक
         अन्य
                / बिन / एलएस "$ @"
         फाई;     
}

नोट: आपको वास्तविक ls कमांड के अंदर या यदि वह समान फ़ंक्शन और .... स्टैकओवरफ़्लो को पुनः स्थापित करेगा, तो आपको पूर्ण पथ का संदर्भ देना होगा! :-)

संपादित करें: हाँ, कमांड कुंजी शब्द उर्फ ​​लुकअप को रोकने का एक बेहतर तरीका है।


मुझे पूरा यकीन है कि कमांड कीवर्ड क्या करता है?
साठफुटेरसूड

1
'कमांड' कमांड (!) का प्रयोग फंक्शन / उर्फ ​​लुकअप को रोकता है।
njd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.