क्या मैं एक उपनाम के रूप में cd ../ .. का उपयोग कर सकता हूं?


11

मैं समानांतर में विंडोज और उबंटू का उपयोग कर रहा हूं और उन दोनों पर कंसोल सामान करता हूं।

विंडोज पर मैं कर सकता हूं

C:\Users\Thomas>cd..\..
C:\>

हालांकि, लिनक्स पर यह काम नहीं करता है, न तो बैकस्लैश के साथ और न ही आगे स्लैश के साथ।

21:17:10 $ cd../..
bash: cd../..: No such file or directory

चूंकि मैं अक्सर वह गलती करता हूं, इसलिए मैंने .bash_aliasesउस स्थिति के लिए एक उपनाम को परिभाषित करने की कोशिश की है:

alias cd../..='cd ../..'
alias cd..\..='cd ../..'

जब मैं एक नया बैश शुरू करता हूं, मुझे मिलता है

21:16:26 $ bash
bash: alias: `cd../..': invalid alias name

मैं कैसे cd..\..और cd../..सही ढंग से उपनाम सेट करूँगा ?

cd..\..एस्केप वर्ण साथ कोई समस्या है लगता है:

21:39:43 $ cd..\..
bash: cd....: command not found

यह काम नहीं करता है, भले ही मैं एक और उर्फ ​​को परिभाषित करता हूं cd....


2
आप नहीं कर सकते। एक आदेश, उपनाम या फ़ाइल नाम में /वर्ण नहीं हो सकता । \ संस्करण, दूसरे हाथ पर, ठीक काम करना चाहिए।
फकीरेम

@fkraiem: ऐसा लगता है कि बैकस्लैश संस्करण में एस्केप चरित्र के रूप में समस्याएं हैं। सवाल अपडेट किया।
थॉमस वेलर

ओह, वास्तव में। प्रेषक man bash: वर्ण /, $, `, और = और शेल उपापचियों में से कोई भी या ऊपर सूचीबद्ध वर्ण उद्धृत करने से कोई अन्य नाम प्रकट नहीं हो सकता है।
21

अरे नहीं। मैंने कोशिश की man aliasऔर यह मौजूद नहीं था। यदि आप जवाब के रूप में देते हैं, तो मैं इसे स्वीकार करूंगा।
थॉमस वेलर

उपनाम एक चीज हैं, शेल फ़ंक्शन एक और हैं। एक और नज़र है।
एलेक्सिस

जवाबों:


10

/और \उन पात्रों में से हैं, जो बश उर्फ ​​नाम में प्रकट नहीं हो सकते। से man bash:

वर्ण /, $`और, और =शेल मेटाचैकर या ऊपर सूचीबद्ध वर्णों में से कोई भी उपनाम नाम में प्रकट नहीं हो सकता है।

वर्कअराउंड के रूप में, आप Zsh पर स्विच कर सकते हैं, जो दोनों को अनुमति देता है:

% grep 'alias.*cd' .zshrc 
alias cd../..='cd ../..'
alias cd..\\..='cd ../..'
% pwd
/Users/firas
% cd../..
% pwd
/ 
% cd
% pwd
/Users/firas
% cd..\..
% pwd
/

12

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

cd../.. () { cd ../..; }

आप उपनाम या फ़ंक्शन नाम में बैकस्लैश का उपयोग नहीं कर सकते। बैकस्लैश चरित्र अगले वर्ण को उद्धृत करता है, इसलिए cd..\..इसे cd....स्ट्रिंग के रूप में देखा जाता है , इससे पहले कि एक कमांड नाम के रूप में देखा जाता है। आप एक कमांड नामित कॉल करने के लिए चाहते हैं cd..\.., तो आप टाइप करने की आवश्यकता cd..\\.., 'cd..\..', या कुछ बराबर। इसके अलावा, एक कमांड नाम जिसे किसी भी तरह से उद्धृत किया गया था, वह उपनाम खोज के लिए नहीं माना जाता है, इसलिए आप कभी भी उपनाम नाम का उपयोग नहीं कर सकते। बैश फ़ंक्शन नामों में बैकस्लैश की अनुमति नहीं देता है, या तो। चूँकि cd..\..इसे पार्स किया गया है cd...., आप एक फ़ंक्शन को परिभाषित कर सकते हैं जिसे cd....(ऊपर) कहा जाता है ।

यदि आप cdकमांड का उपयोग करते हैं , तो आपको किसी अन्य कमांड की तरह ही इसके बाद स्पेस टाइप करना होगा। लेकिन आप बिल्कुल भी टाइप न करके टाइपिंग को बचा सकते हैं cdautocdनिम्न पंक्ति के साथ विकल्प सेट करें ~/.bashrc:

shopt -s autocd

फिर आप कमांड लाइन पर एक निर्देशिका का नाम टाइप कर सकते हैं, और "निष्पादन" उस निर्देशिका को बदल देगा।

~/some/sub/directory$ ../..
~/some$ 

अगर मैं shoptबात करूं, तो शायद मैं विंडोज पर जल्द ही उस कार्यक्षमता को याद करूंगा :-)
थॉमस वेलर

उम, यह सच नहीं है। स्लैश को बाश फ़ंक्शन नामों में स्वीकार किया जाता है।
एलेक्सिस

@alexis आह, ठीक है, आप बैश में स्लैश का उपयोग कर सकते हैं। निश्चित, धन्यवाद।
गिल्स एसओ- बुराई को रोकना '

@ThomasW। निश्चय ही आप करेंगे। autocdएक कारण था कि जब मैं बैश नहीं था, तो मैंने वापस zsh पर स्विच किया। विंडोज का उपयोग करने का एकमात्र सभ्य तरीका साइगविन को स्थापित करना है, जो पूरी तरह से zsh के साथ है।
गिल्स एसओ- बुराई को रोकना '

5

"आप उपनाम या फ़ंक्शन नाम में स्लैश का उपयोग नहीं कर सकते हैं "? यह मुझे खबर है। मैं लिनक्स और ओएस एक्स बैश पर वर्षों से निम्न शेल फ़ंक्शन का उपयोग कर रहा हूं, और कभी भी कोई परेशानी नहीं हुई:

function ../.. { cd ../..; echo "$PWD"; }

स्वाभाविक रूप से, cd../..एक अच्छा फ़ंक्शन नाम भी है। एक स्लैश का उपयोग शेल फ़ंक्शन नाम में किया जा सकता है।

बैकस्लैश संस्करण के लिए, आप इसे किसी अन्य या फ़ंक्शन नाम में एम्बेड नहीं कर सकते हैं, लेकिन आपके पास नहीं है: जब आप टाइप करते हैं cd..\.., तो बैकस्लैश को भागने के रूप में व्याख्या करता है और परिणामस्वरूप निष्पादित करने का प्रयास करता है cd....। इसलिए उसे परिभाषित करें और आप वह सब कुछ कर सकते हैं जो आप बाद में कर रहे थे। आपका स्वागत है।

function cd.... { cd ../..; } 

2

यदि आप उपनाम रखना चाहते हैं, तो बस क्यों नहीं:

alias   ..='cd ..'
alias  ...='cd ../../' 
alias ....='cd ../../../'

या, यदि आप जाने की जरूरत है, तो जिस तरह से वापस:

alias   .3='cd ../../../' 
alias   .4='cd ../../../../'
alias   .5='cd ../../../../../'
# how far back do you need to go on a normal basis..?

पता नहीं कितनी अच्छी तरह से यह आपके विंडोज मस्तिष्क के साथ मानसिक रूप से तालमेल रखने में मदद करता है, लेकिन यह अभी भी जाने के लिए एक सरल तरीके की तरह लगता है। (कम से कम हममें से जो भाग्यशाली हैं, उन्हें इस बारे में चिंता करने की ज़रूरत नहीं है कि विंडोज पर चीजें कैसे की जाती हैं।)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.