2013-01-03 33 views
5

मैं एक फ़ंक्शन कैसे लिख सकता हूं कि बैश $ आदेशों के पहले में अनदेखा करता है? मुझे यह चाहिए क्योंकि कभी-कभी जब मैं वेब से कमांड पेस्ट करता हूं तो इसमें पहले वर्ण में $ शामिल होता है।

$ lsls या $ grep 'foo'grep 'foo' करना चाहिए।

यह काम नहीं करेगा क्योंकि $ मान्य कार्य नाम नहीं है।

function $ { 
    ... 
} 
+5

इसे कॉपी नहीं है के साथ शुरू करने के लिए? कि '$ 'का प्रयोग शेल प्रॉम्प्ट को इंगित करने के लिए किया जाता है। –

+1

@MarcB मैं ऐसा करने के लिए बहुत आलसी हूं। मैं एक कार्यक्रम लिखना पसंद करता हूं और अपना जीवन आसान बनाता हूं – Mohsen

उत्तर

9

एक फ़ाइल $ बनाएं जिसका नाम कहीं पर अपने $PATH, उदा ~/bin में:

cd ~/bin 
cat <<'EOF' > \$ 
#!/bin/sh 
"[email protected]" 
EOF 

यह निष्पादन करें:

chmod 755 \$ 

और पागलपन का आनंद:

$ ls -l 
total 92 
-rwxr-xr-x 1 thomas thomas 13 Jan 3 19:09 $ 
$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ls 
total 92 
-rwxr-xr-x 1 thomas thomas 13 Jan 3 19:09 $ 
+2

+1 अच्छा विचार। व्हाइटस्पेस के साथ तर्कों को व्यवस्थित करने के लिए, आपको '" $ @ "का उपयोग करना चाहिए। मैंने सोचा कि एक समारोह एक स्क्रिप्ट से बेहतर होगा, लेकिन बश एक समारोह नाम के रूप में '$' को अस्वीकार करता है। –

+0

धन्यवाद, इसे ठीक किया गया। – Thomas

+1

एक और युक्ति: पहले हेरेडोक डेलीमीटर के चारों ओर सिंगल कोट्स डालें। वह प्रभावी रूप से एकल हेड्रोक उद्धृत करता है और आपको चर से बचने की आवश्यकता नहीं होगी: 'बिल्ली <<'EOF' >' $ '' –