प्रति-निर्देशिका के आधार पर एक उपनाम कैसे सेट करें?


18

माना कि आपके पास एक उपनाम है go, लेकिन यह अलग-अलग निर्देशिकाओं में अलग-अलग चीजें करना चाहते हैं?

एक निर्देशिका में इसे चलना चाहिए cmd1, लेकिन दूसरी निर्देशिका में इसे चलाना चाहिएcmd2

वैसे, मेरे पास पहले से ही उपरोक्त निर्देशिकाओं पर स्विच करने के लिए एक उपनाम है, इसलिए क्या goउपनाम के लिए उपनाम असाइन करना संभव है foo?

alias "foo=cd /path/to/foo"

OSX पर बैश (?) में काम करना।


1
यह वही है जो मेकअप के लिए है।
इसका कर्क

जवाबों:


16

यह पूरी तरह से निश्चित नहीं है कि आप क्या पूछ रहे हैं, लेकिन एक उपनाम सिर्फ उर्फ ​​में जो है वह फैलता है। यदि आपके पास दो उपनाम हैं, तो आप विभिन्न आदेशों को जोड़ सकते हैं, यहां तक ​​कि उपनाम भी।

alias "foo=cd /path/to/foo; go"
alias "foo2=cd /path/to/foo2; go"

किसी भी अन्य स्थिति में, आप अपने में एक फ़ंक्शन निर्दिष्ट कर सकते हैं .bashrc

function go ()
{
    if [ "$PWD" == "/path/to/foo" ]; then
       cmd1
    elif [ "$PWD" == "/path/to/go" ]; then
       cmd2
    fi;
}

यदि आपके पास अधिक विकल्प हैं, तो आप केस संरचना का बेहतर उपयोग कर सकते हैं।


4

मुझे लगता है कि आप बहुत "निर्देशिका उन्मुख" हैं, और उस मामले में, यह आपकी मानसिकता को बेहतर बना सकता है।

(लेकिन ईमानदार होने के लिए, मुझे लगता है कि यह एक बुरा विचार है, आप वैश्विक होना चाहते हैं।

में .bashrc, डाल alias go="./.cmd"(तब source ~/.bashrc)।

फिर, ऐसी प्रत्येक डायरेक्टरी में .cmd, उसके बाद एक स्क्रिप्ट डालें chmod +x .cmd, फिर बस goअपनी बात करें।


2
यह बहुत काम है ... यहाँ का उपयोग मामला है: जब परीक्षण चल रहा है, तो मैं उर्फ ​​rspec- सभी को कुछ परीक्षण चलाना चाहता हूं। लेकिन कौन सा परीक्षण परियोजना पर निर्भर करता है। और यह निर्देशिका द्वारा निर्धारित किया जाता है।
बी सेवन

2
मैं क्या देख सकता हूं, आपके पास दो विकल्प हैं, या तो एक फ़ंक्शन (जैसे @ बर्नहार्ड ऊपर वर्णित है) का उपयोग करें, और निर्देशिका के आधार पर शाखा (जैसे उसने कहा), या, आप निर्देशिकाओं में पैरामीटर डाल सकते हैं। यह सोचने के लिए आओ, इसे स्क्रिप्ट करने की ज़रूरत नहीं है, आप बस touch .TESTNO; echo 2 > .TESTNOप्रत्येक निर्देशिका में एक फ़ाइल ( ) डाल सकते हैं , और फिर, अपने फ़ंक्शन में, उस फ़ाइल की तलाश करें और किस टेस्ट नंबर के अनुसार शाखा करें। फ़ाइल फ़ाइल। शामिल हैं। हालांकि बिल्कुल मुश्किल नहीं है, आप शायद इसके लिए एक उपनाम का उपयोग नहीं कर सकते हैं; आपको एक फ़ंक्शन का उपयोग करना चाहिए।
इमानुएल बर्ग

2

मैं एक ऐसे प्रोजेक्ट पर काम कर रहा हूं जो बस इतना ही पूरा करता है। इसे देखें: localalias

यहाँ एक डेमो है:

यहां छवि विवरण दर्ज करें

काफी मजेदार, मैं वास्तव goमें डेमो में एक उदाहरण के रूप में इस्तेमाल किया । मैंने स्विचिंग निर्देशिकाएं नहीं दिखाईं (कुछ को मुझे डेमो के बारे में बदलना चाहिए) लेकिन laकमांड के साथ कार्य वास्तव में उस निर्देशिका के लिए स्थानीय हैं जो वे परिभाषित हैं।


1
function go() {
  if [ ! -e "./.cmd1" ]
    then command go -a $1
    else command go -b $1
  fi
}

इसी तरह की बात है, लेकिन "गो" मान लेना एक कमांड है जिसे आप किसी विशिष्ट निर्देशिका से अलग कार्यक्षमता चाहते हैं।


1

यदि आप अपने .bashrc में निम्न फ़ंक्शन जोड़ते हैं

function cd () { 
  builtin cd "$@" && [[ -f .aliases ]] && . .aliases
  return 0
}

हर बार जब आप एक निर्देशिका के लिए एक .liases फ़ाइल के साथ सीडी यह sourced मिल जाएगा।

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

इस ट्रिक से एलियास कभी नहीं हटते लेकिन आप फंक्शन में जितना चाहें उतना कोड लिख सकते हैं।

ondir इस ट्रिक का उपयोग करता है और इसमें एक टन घंटी और सीटी होती है।

http://swapoff.org/ondir.html#download


जबकि मुझे लगता है कि यह चतुर है क्योंकि ऐसा लगता है कि यह खतरनाक है क्योंकि यह निर्भर करता है .bashrc। (यह cronउदाहरण के लिए काम नहीं करेगा )।
ctbrown

मुझे यकीन नहीं है कि bashrc के बारे में कुछ भी खतरनाक है। मेरा मानना ​​है कि यह उपनामों के लिए मानक / सही जगह है। यह वातावरण की प्रकृति में है कि वे अलग हैं। प्रश्न दीजिए, एक अलग वातावरण की आवश्यकता है। यदि आप क्रोन को एक समान वातावरण देना चाहते हैं, तो आपको उपयोगकर्ताओं को सोर्सिंग में .bashrc को रोकने के लिए कुछ भी नहीं है। एनबी क्रोन को हमेशा आइसैट्टी और चूम्स के उपयोग के कारण एक इंटरैक्टिव शेल में अलग व्यवहार करने की उम्मीद की जानी चाहिए।
टेकनोपुल

सच है, खुद को बैशकेक के बारे में कुछ भी खतरनाक नहीं है। समस्या यह है कि आपके पास यह सुनिश्चित करने का कोई तरीका नहीं है कि जो प्रक्रिया निर्देशिका में बदल रही है वह bashrc स्रोत होगी। यह एक बात है अगर यह आपका इंटरेक्टिव सेशन है। यह काफी अलग है अगर उस निर्देशिका को उपयोगकर्ताओं और प्रक्रियाओं के बीच साझा किया जाता है जो बैश शेल का उपयोग कर सकते हैं या नहीं कर सकते हैं। .bash_aliases कुछ सिस्टम पर बैश उपनामों के लिए पसंदीदा स्थान है।
ctbrown
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.