एक कमांड चलाएं जो एक उपनाम द्वारा छाया हुआ है


163

मान लीजिए कि मेरे पास बास में निम्नलिखित उपनाम हैं alias ls='ls --color=auto'- और मैं lsबिना विकल्पों के साधारण कॉल करना चाहता हूं । क्या ऐसा करने का एकमात्र तरीका है कि अनलिया, कमांड और फिर उर्फ ​​फिर से करें? या कुछ निफ्टी ट्रिक या वर्कअराउंड है?


2
नीचे दिए गए कुछ उत्तरों के बारे में बस एक नोट: "कमांड" इसे पूरा करने का एकमात्र सुरक्षित तरीका है। उदाहरण के लिए, "।" या "स्रोत" बिल्ट-इन हो सकता है कि स्क्रिप्ट-परिभाषित फ़ंक्शन द्वारा ओवरराइड किया जाए। "आज्ञा।" या "कमांड सोर्स" स्क्रिप्ट-परिभाषित फ़ंक्शन के बजाय स्रोत को सुरक्षित रूप से निष्पादित करने का एकमात्र तरीका है। बैकस्लैश पद्धति "\" सहित कोई भी अन्य विकल्प नहीं, कार्य, और निश्चित रूप से कोई "/ बिन / स्रोत" विकल्प नहीं है जिसे आप पूर्ण पथ निर्दिष्ट करके आमंत्रित कर सकते हैं।
देजय क्लेटन

जवाबों:


209

उपनाम को अक्षम करने के लिए आप बैक स्लैश भी कर सकते हैं: \ls

संपादित करें: ऐसा करने के अन्य तरीकों में शामिल हैं:

"कमांड" का उपयोग करें: मिकेल केcommand ls अनुसार ।

पूर्ण पथ का उपयोग करें: uther के/bin/ls अनुसार ।

कमांड को कोट करें: "ls"या 'ls'मिकेल की टिप्पणी के अनुसार।

आप उस टर्मिनल सत्र के लिए अस्थायी रूप से उपनाम हटा सकते हैं unalias command_name


ऐसा करने के लिए यह मेरा मानक तरीका है।
ncmathsadist

बहुत अच्छा, tcsh के साथ भी अच्छा काम करता है
लेवोन

10
यह तरीका बहुत उपयोगी है। यह केवल उपनामों को दरकिनार करता है, कार्यों को नहीं, जो इसे commandया उससे अलग बनाता है builtin
मिकेल

1
ऐसा लगता है जैसे l\sवही काम करता है। क्या यह व्यवहार बग या सुविधा है?
निकल्स बी

4
यह एक "सुविधा" है। केवल निर्विवाद उपनामों का विस्तार किया जाता है। तो आप इसे उद्धरणों में रख सकते हैं, या अपनी पसंद के अनुसार बैकस्लैश का उपयोग कर सकते हैं। बैश उपनाम संदर्भ देखें ।
मिकेल

79

यही commandआज्ञा है।

प्रयत्न, कोशिश

command ls

यह शेल को उपनामों और कार्यों को बायपास करने के लिए कहता है।

यह तरीका bash , zsh और ash / डैश द्वारा समर्थित है ।


2
सबसे अच्छा जवाब, यह सबसे अधिक उत्थान क्यों नहीं है, हालांकि? :) +1
0xC0000022L

11
क्योंकि यह बैकस्लैश विधि के रूप में वर्णों की संख्या में 8 गुना जोड़ देता है
जोएलफैन

1
@STATUS_ACCESS_DENIED यह भी tcsh के साथ काम नहीं करता है (और इसलिए संभवतः या तो ccsh के साथ नहीं)। `\ 'विधि करता है
लेवोन

3
बैकस्लैश फीचर सुरक्षित नहीं है। जबकि यह समान रूप से नामित उपनामों के खिलाफ सुरक्षा प्रदान करता है, यह समान रूप से नामित कार्यों के खिलाफ सुरक्षा प्रदान नहीं करता है।
देजय क्लेटन

2
@JoelFan मेरे पास कुछ अतिरिक्त चरित्र हैं और मेरी स्क्रिप्ट्स का अनुसरण करना और सभी के लिए काम करना आसान है। एक गुप्त स्लैश के बजाय, जो सहज नहीं है, याद करने में आसान है, अच्छी तरह से प्रलेखित नहीं है, और कार्यों को दरकिनार करने के लिए काम नहीं करता है।
डेनिस

19

उपनाम केवल एक परिभाषित शॉर्टकट है। इस उदाहरण में, उर्फ ​​परिभाषित स्ट्रिंग है ls, जो निष्पादित करता है ls --color=auto। यदि आप उस व्यवहार को नहीं चाहते हैं, तो आप बाइनरी lsको पूर्ण पथ का उपयोग करके कॉल कर सकते हैं ।

इसलिए निष्पादन केवल /bin/lsरंग के बिना आउटपुट का उत्पादन करेगा क्योंकि यह आपके द्वारा परिभाषित उपनाम नहीं है।

आप उपनाम को कुछ अलग करने के लिए भी बदल सकते हैं, या एक नया उपनाम जोड़ lsसकते हैं जो रंग मापदंडों के बिना ही निष्पादित होता है।


2
आपको यह जानना होगा कि कमांड कहां है। कुछ सिस्टम पर, के बीच विभाजन /binऔर /usr/binमनमाना है।
कीथ थॉम्पसन

@KeithThompson उसके लिए, आप whichकुछ आदेशों के लिए उपयोग कर सकते हैं which ls:।
cst1992

@ cst1992: यदि आप उपयोग which(या type) करने जा रहे हैं , तो यह एक लुकअप करता है $PATH; आप पथ निर्दिष्ट करने के बजाय केवल उपयोग lsया उपयोग कर सकते हैं \ls
कीथ थॉम्पसन

10

एक अन्य तरीका, @ uther के उत्तर पर, स्वचालित रूप से निष्पादन योग्य पथ को खोजने के लिए ( $(which ...)या बैकटिक्स का `which ...`उपयोग करना ``) है। इसमें काम आएगा bash:

$(which ls)

`which ls`

निस्संदेह, एक के साथ कमांड को उपसर्ग करना \बहुत छोटा है।

अद्यतन : कैसे एक उपनाम आदेश पर `जो` का उपयोग करने के लिए? , यह बिल्कुल भी विश्वसनीय नहीं लगता है।


के लिए कोष्ठक क्या है? मुझे लगता है कि आप `which ls`बाइनरी को सीधे निष्पादित करना चाहते हैं।
amyassin

2
@ संयम: दोनों वाक्यविन्यास समान हैं। (बीटीडब्लू, आपको कोड फॉर्मेटिंग में
बैकटिक्स

वास्तव में (which ls)मेरे लिए (उबंटू 12.04 एलटीएस पर) काम नहीं किया था और बैकटिक्स कठिन थे, मैं बस उनसे बच गया: \ `जो ls \`। वहां पहुंचने के लिए बहुत से संपादन किए गए :)
amyassin

1
@ user946850 "कोड स्पैन के भीतर एक शाब्दिक बैकटिक कैरेक्टर को शामिल करने के लिए, आप कई बैकटिक्स को ओपनिंग और क्लोजिंग डेलिमिटर के रूप में उपयोग कर सकते हैं"। स्रोत: Markdown संदर्भ
मिकेल

@ संयम: क्या आपने जोड़ा $?
krlmlr

2

व्यक्तिगत रूप से, मैं केवल उपनामों को कमांड के रूप में समान नामों से परिभाषित करने से बचता हूं, इसलिए lsहमेशा वास्तविक कमांड को आमंत्रित करता है। मैं जैसे विकल्प के विभिन्न संयोजनों के लिए उपनाम या कार्य होते हैं l, llऔर lg। (इसका मतलब है कि मुझे unalias lsमेरी ज़रूरत है .bashrcया .cshrc)

मुझे लगता है कि ओएस की मान्यताओं के बारे में जो विकल्प मुझे पसंद हो सकते हैं ( lsकमांड के डिजाइनरों की खुद की मान्यताओं को ओवरराइड करना ) शायद ही कभी मेरे अपने व्यक्तिगत स्वाद से मेल खाते हैं। मैं के लुक को नापसंद करने के लिए होता हूं ls --color=auto, और ब्लैक-ऑन-व्हाइट और व्हाइट-ऑन-ब्लैक के बीच इसकी विरासत बहुत भिन्न हो सकती है।

YMMV, और अन्य समाधान निश्चित रूप से जानना अभी भी अच्छे हैं।


1

अपरकेस में कमांड टाइप करना काम करने लगता है, जैसे LS, हालांकि मुझे यकीन नहीं है कि क्यों।


4
किस शेल में, कौन सा ऑपरेटिंग सिस्टम, कौन सा टर्मिनल, आदि?
मिकेल

@ मिकेल एक पैकेज "एसएल" है जो "एलएस" के रूप में "एसएल" प्रदान करता है। उबंटू में दिए गए टिप्स बैश यह भी कहते हैं कि "एलएस" "एसएल" द्वारा प्रदान किया गया है।
इज़्काता

1
यह मैक ओएस एक्स 10.7 में बैश 4 (फिन्क के साथ स्थापित) है। यह अन्य कमांड्स के लिए भी काम करता है जिन्हें मैंने rm और grep की तरह अलियास किया है।
asmeurer

3
यह सिर्फ एक मजाक है :) इस mn पृष्ठ से:LS - display animations aimed to correct users who accidentally enter LS instead of ls.
amyassin

7
मुझे लगता है कि यह मैक ओएस एक्स के लिए काम करता है क्योंकि इसका फाइल सिस्टम डिफ़ॉल्ट रूप से केस-असंवेदनशील है। यह अन्य यूनिक्स पर काम नहीं करेगा।
जेंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.