सवाल मैं स्थायी बैश उपनाम कैसे बना सकता हूं?


मैं एक उपनाम बनाना चाहता हूँ rm इस आदेश को निष्पादित करने के बाद एक पुष्टिकरण संदेश प्राप्त करने के लिए आदेश। तो मैं इस तरह एक उपनाम बना रहा हूँ alias rm='rm -i'। लेकिन जहां तक ​​मुझे पता है कि यह एक अस्थायी उपनाम है और जब तक आप टर्मिनल बंद नहीं करते हैं तब तक यह रहता है।

जैसा कि समझाया गया है यहाँ उपनाम को स्थायी रूप से सहेजने के लिए मुझे निष्पादित करने की आवश्यकता है ~/.bash_aliases या ~/.bashrc टर्मिनल में आदेश और मेरे उपनाम जोड़ें। लेकिन जब मैं निष्पादित करता हूं ~/.bashrc मुझे निम्न त्रुटि संदेश मिलता है:

bash: /home/bakhtiyor/.bashrc: Permission denied

जब मैं दौड़ता हूँ ~/.bash_aliases मुझे इस तरह का एक और त्रुटि संदेश मिलता है:

bash: /home/bakhtiyor/.bash_aliases: File or directory doesn't exist.

वास्तविक समस्या क्या है और मैं इसे कैसे हल कर सकता हूं?


308
2017-12-15 07:54


मूल


आपने उपनाम कैसे बनाया ?? - karthick87
@ Karthick87। मैंने अपना प्रश्न अपडेट किया है। - Bakhtiyor
उत्तर - stackoverflow.com/a/2622711/1487102 - neaumusic


जवाब:


उपनाम बनाने के लिए स्थायी रूप से उपनाम जोड़ें .bashrc फ़ाइल

gedit ~/.bashrc

और फिर नीचे अपने उपनाम जोड़ें।

alt text

अब निष्पादित करें . ~/.bashrc आपके टर्मिनल में (के बीच एक जगह होनी चाहिए . तथा ~/.bashrc

अब आप अपने उपनाम देख सकते हैं।

alt text


342
2017-12-15 08:24



@ karthick87 आपने लिखा है "अब निष्पादित करें। ~ / .bashrc आपके टर्मिनल में (। और ~ / .bashrc के बीच एक अंतर होना चाहिए।" इस चरण को क्यों जरूरी है? - Geek
पहला '।' क्या करता है अंदर करो ~ / .bashrc? - Zen
@ गीक @ जेन "निष्पादन" सही शब्द नहीं था। डॉट के बराबर है source। साथ में . ~/.bashrc, आप अपने बाश स्रोत। फ़ाइल निष्पादित करने से बच्चे की प्रक्रिया शुरू हो जाएगी, इस प्रक्रिया में कमांड निष्पादित करें, फिर वापस आएं। बाल प्रक्रिया में जो भी किया जाता है, उसके माता-पिता की प्रक्रिया पर कोई प्रभाव नहीं पड़ता है (जिस बाश से आपने निष्पादित किया है)। इसके बजाए, सोर्सिंग (डॉट के साथ) ठीक उसी प्रकार कार्य करता है जैसे आपने टर्मिनल में फ़ाइल की सामग्री लिखी है। आप यही चाहते हैं। .bashrc हर बार जब आप एक बैश शुरू करते हैं तो सोर्स किया जाता है। यदि आप परिवर्तन करते हैं, तो वे तब तक लागू नहीं होंगे जब तक कि आप एक नया बैश या स्रोत मैन्युअल रूप से प्रारंभ नहीं करते। - Gauthier
@ बटलबूटस - पूरे सिस्टम की बजाय केवल एक उपयोगकर्ता की वरीयताओं को बदलना चाह सकता है। Ubuntu में सिस्टम-व्यापी .bashrc फ़ाइल /etc/bash.bashrc है - WillC
यह केवल आंशिक रूप से काम करता है। मुझे निष्पादित करने की आवश्यकता है . ~/.bashrc हर बार जब मैं टर्मिनल खोलता हूं। ओएस एक्स ईआई कैप्टन (v10.11.6) का उपयोग करना। - Shubham A.


उपनाम बनाने के कई तरीके हैं। सबसे अधिक इस्तेमाल किए जाने वाले तरीके हैं:

  1. सीधे अपने आप में उपनाम जोड़ें ~/.bashrc फ़ाइल

    उदाहरण के लिए: इन पंक्तियों को संलग्न करें ~/.bashrc फ़ाइल

    alias ll='ls -l'
    alias rm='rm -i'
    

    अगली बार (लॉग आउट / इन, या किए जाने के बाद . ~/.bashrc) जब आप टाइप करते हैं rm  rm -i आदेश निष्पादित किया जाएगा।

  2. दूसरी विधि आपको एक अलग उपनाम फ़ाइल बनाने देती है, इसलिए आपको उन्हें अंदर नहीं रखना होगा .bashrc, लेकिन आपकी पसंद की एक फाइल के लिए। सबसे पहले, अपना संपादित करें ~/.bashrc फ़ाइल करें और निम्न पंक्तियों को जोड़ें या अनमर्म करें, अगर यह पहले से नहीं है

    if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
    fi
    

    इसे सहेजें और फ़ाइल बंद करें। उसके बाद, आपको बस इतना करना है ~/.bash_aliases फाइल करें और पहले उपनाम में निर्दिष्ट प्रारूप के साथ, अपने उपनाम जोड़ें।

    मेरी सामग्री ~/.bash_aliases फ़ाइल:

    alias cs='cd;ls'
    

205
2017-12-15 08:21



उपयोग के लिए +1 ~/.bash_aliases। - ændrük
हां, उपनाम के लिए एक और फाइल का उपयोग करना अधिक साफ है, distros के बीच पोर्टेबल भी है। मैं उस फ़ाइल का उपयोग इसलिए करता हूं क्योंकि कुछ उपनाम पर्याप्त नहीं हैं और एक फ़ंक्शन की आवश्यकता है। तो यदि आप उस कार्य के लिए फ़ाइल का उपयोग करते हैं तो यह अधिक साफ है। मेरे पास एक और उपनाम है -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", इसलिए उपनाम बचत पर लाभ उठाया, और यदि आप कुछ गलती करते हैं तो यह आपको विज्ञापन देगा। - erm3nda
किसी भी तरह से मैंने उपनाम जैसे जोड़ा alias ls='ls -althr', दिए गए कुछ झंडे प्रभावी नहीं होंगे, इस मामले में -टी ध्वज प्रभावी नहीं हुआ। तुम जानते हो क्यों? - Sajuuk
डिफ़ॉल्ट रूप से ~/.bashrc के लिए शामिल है ~/.bash_aliases, इसे संपादित करने की कोई ज़रूरत नहीं है। - Jaakko
हमेशा ~ / .bashrc में ~ / .bash_aliases के लिए शामिल नहीं है जैसा कि उबंटू टर्मिनल विंडोज 10 के साथ मेरे मामले में था, यह समाधान बहुत आसान था। - Jose


समस्या यह है कि आप एक निष्पादन योग्य फ़ाइल निष्पादित करने का प्रयास कर रहे हैं: आप इसे यहां देख सकते हैं:

ls -la ~/.bashrc
-rw-r--r-- 1 username username 3596 2010-08-05 17:17 /home/pt001424/.bashrc

ध्यान दें कि पहले कॉलम (फ़ाइल अनुमतियां) पर कोई "x - निष्पादन योग्य" अक्षर नहीं है।

प्रोफाइल फाइल निष्पादन योग्य फाइल नहीं हैं, उन्हें निष्पादित करने के बजाय आप उन्हें लोड करते हैं:

source /home/bakhtiyor/.bashrc

या

. /home/bakhtiyor/.bashrc

17
2017-12-15 10:24





यह मुझे लगता है जैसे आपकी एकमात्र समस्या बस निष्पादन योग्य नहीं होने पर .bashrc निष्पादित करने का प्रयास कर रही है। लेकिन यह करने का सही तरीका नहीं है; जब भी आप इस फ़ाइल में बदलाव करते हैं, तो आपको इसे कमांड द्वारा "निष्पादित" करना चाहिए:

source ~/.bashrc

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

मुझे लगता है कि दूसरी त्रुटि यह थी क्योंकि bash_aliases मौजूद नहीं है। यह आवश्यक नहीं है, बस अपने परिवर्तनों को अलग और संगठित रखने की अनुशंसा की जाती है। इसका उपयोग केवल तभी किया जाता है जब यह अस्तित्व में है, और आप इसके लिए परीक्षण देख सकते हैं .bashrc:

if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi

यह कहता है कि अगर फ़ाइल ~ / .bash_aliases मौजूद है, तो इसे चलाएं।


15
2018-01-16 20:29



~/.bash_aliases बेहतर है। askubuntu.com/questions/194111/... - tomByrer
का उपयोग करते हुए source आदेश ने मेरे उपनाम काम किया। +1 - dspacejs
बस पूर्णता के लिए: लाइन पर प्रारंभिक बिंदु . ~/.bash_aliases शैल अंतर्निहित कमांड के समान अर्थ है source। मुझे यह पता चल रहा है कि क्या हो रहा है, यह सही जवाब है। - Melebius


echo "alias vps='ssh -X user@example.com'" >> ~/.bashrc

यह एक उदाहरण है जिसे मैं ढूंढ रहा था, टर्मिनल ("vps") पर कुछ अक्षरों को दूरस्थ रूप से लॉग इन करने के लिए टाइप करने का तरीका और X11 फ़ॉरवर्डिंग सक्षम करने के लिए, ताकि मैं नेटवर्क पर "gedit" जैसे गुई ऐप्स चला सकूं।

कमांड / एलियाज्ड कमांड जो कुछ भी, इको स्टेटमेंट, उद्धरण चिह्न, और फ़ाइल (>>) के लिए कमांड के आउटपुट को जोड़ने के लिए प्रतीक मेरे लिए काम करता है। उपरोक्त आदेश के लिए बस मेरे आदेश को प्रतिस्थापित करें और इसे अपने टर्मिनल में दर्ज करें।


8
2018-06-15 11:39



यहां उद्धरण थोड़ा मुश्किल है। इस उदाहरण में, डबल कोट्स का उपयोग करना असंभव है, लेकिन यदि उद्धरण के भीतर के पाठ में डॉलर के संकेत, बैकस्लाश आदि शामिल हैं, तो आपको यह समझने की आवश्यकता होगी कि शैल उन्हें डबल कोट्स के अंदर कैसे संसाधित करता है। आप अंदरूनी और डबल कोट्स पर सिंगल कोट्स पर स्विच कर सकते हैं, लेकिन फिर भी आपको यह समझने की आवश्यकता है कि बैश उपनाम परिभाषा में डबल कोट्स को कैसे संसाधित करता है। - tripleee


मैंने इस छोटे से काम को .bashrc में एक नया-उपनाम लिखने के लिए बनाया है

##------------------------------------ ##
 #           -- new-alias --           #
 # creates new alias & writes to file  #
 #          $1 = alias new             #
 #          $2 = alias definition      #
##------------------------------------ ##
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:"
    read NAME
  else
    NAME=$1
  fi

  if [ -z "$2" ]; then
    echo "alias definition:"
    read DEFINTION
  else
    if [ "$2" = "-cd" ]; then
      DEFINTION='cd '
    else
      DEFINTION=$2
    fi
  fi

  echo "alias $NAME='$DEFINTION'" >> ~/.bashrc
  . ~/.bashrc
}

5
2017-12-17 20:37



अच्छा विचार है, लेकिन इस समारोह के लापरवाह उपयोग से कचरा हो सकता है .bashrc के कई उदाहरणों के साथ alias आदेश। इस तरह के अव्यवस्था से बचने के लिए आपके फ़ंक्शन को निश्चित रूप से कुछ चेकअप लागू करने की आवश्यकता है। - Troublemaker-DV


यदि आप रूबी का उपयोग कर रहे हैं, तो आप rubygem का उपयोग कर उर्फ ​​स्थापित कर सकते हैं।

gem install aka2

प्रयोग

aka generate hello="echo helloworld" #add an alias
aka g hello="echo helloworld"  #add alias for lazy people

aka destroy hello #remove alias
aka d hello #remove alias for lazy people

rubygem आपकी डॉट फ़ाइल को ऑटो-स्रोत करेगा ताकि आपको इसकी आवश्यकता न हो। इसकी जांच - पड़ताल करें।


4
2018-01-21 14:14





मैं उपयोग करने का सुझाव दूंगा /etc/bash.bashrc

आप उस फ़ाइल के अंत में लाइन जोड़ सकते हैं।

alias ok="ping google.com"

प्रति पंक्ति उपनाम डालने के बाद आपको रीबूट या रिलागिन करना होगा।


0
2017-08-09 03:36



"मैं सुझाव दूंगा .." और आप इसका सुझाव क्यों देंगे? - muru
जब तक आप विशेष रूप से सभी उपयोगकर्ताओं के लिए सिस्टम-व्यापी सेटिंग स्थापित नहीं करना चाहते हैं, तब तक आपको सिस्टम फ़ाइल से गड़बड़ नहीं करना चाहिए। एक व्यक्तिगत प्रणाली पर, अंतर मामूली है, लेकिन फिर सिस्टम फ़ाइलों के साथ गड़बड़ करना सड़क के नीचे अधिक जटिल है, इसलिए आपको शायद व्यक्तिगत प्राथमिकताओं के लिए अपनी व्यक्तिगत डॉट फाइलों को प्राथमिकता देना चाहिए (और इससे कहीं और सेटिंग्स को कॉपी करना आसान हो जाता है भविष्य भी)। - tripleee
रीबूट करें? यह वास्तव में भयानक सलाह है, ऐसा मत करो, खासकर जब source /etc/bash.bashrc क्या आप इस उदाहरण में चाहते हैं। लेकिन उपयोग करना चाहिए ~/.bashrc या ~/.bash_aliases बजाय - Xen2050
@ Xen2050, मैंने रीबूट / relogin के बाद यह काम दिखाने के लिए रीबूट का सुझाव दिया। वैसे, यहां तक ​​कि एक और साफ टर्मिनल खिड़की भी काम करेगी। - Fahad Ahammed
आप रीबूट किए बिना किसी नए कर्नेल में अपग्रेड कर सकते हैं, यह पुरानी विंडो नहीं है ;-) - Xen2050