আমি কীভাবে স্থায়ী বাশ ওরফে তৈরি করব?


381

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.

আসল সমস্যাটি কী এবং আমি কীভাবে এটি সমাধান করতে পারি?



alias rm='rm -i'rm haphazardly ব্যবহার করার সমস্যা সমাধান করে না
qwr

উত্তর:


428

স্থায়ীভাবে একটি উপাধি তৈরি করতে আপনার .bashrcফাইলটিতে উপনাম যুক্ত করুন

gedit ~/.bashrc

এবং তারপরে নীচে আপনার উপনাম যুক্ত করুন।

বিকল্প পাঠ

এখন . ~/.bashrcআপনার টার্মিনালে চালিত করুন ( .এবং এর মধ্যে একটি স্থান থাকা উচিত) ~/.bashrc

এখন আপনি আপনার নামটি পরীক্ষা করতে পারেন।

বিকল্প পাঠ


5
। @ karthick87 আপনি লিখেছেন "।।। এখন চালানো ~ আপনার টার্মিনালে / .bashrc (মধ্যে একটা ফাঁক সেখানে উচিত এবং ~ / .bashrc" কেন এই পদক্ষেপ প্রয়োজন?
গিক

5
প্রথম 'কি করে?' কর ~ / .bashrc?
জেন

22
@ গীক @ জেন "এক্সিকিউট" সঠিক শব্দটি ছিল না। বিন্দুটি সমান source। সহ . ~/.bashrc, আপনি আপনার বাশ উত্স। ফাইলটি কার্যকর করা একটি শিশু প্রক্রিয়া শুরু করবে, এই প্রক্রিয়াটিতে আদেশগুলি কার্যকর করবে এবং তারপরে ফিরে আসবে। শিশু প্রক্রিয়াতে যা কিছু করা হয় তার পিতামাতার প্রক্রিয়াতে কোনও প্রভাব নেই (আপনি যে বাশ থেকে চালিয়েছিলেন)। পরিবর্তে, সোর্সিং (ডট সহ) ঠিক এমনভাবে কাজ করে যা আপনি টার্মিনালে ফাইলটির লিখিত সামগ্রী লিখেছেন। এটাই তুমি চাও. .bashrcআপনি যখন কোনও ব্যাশ শুরু করেন তখনই তা উত্সাহিত হয়। আপনি যদি পরিবর্তন করেন তবে আপনি ম্যানুয়ালি নতুন বাশ বা উত্স শুরু না করা পর্যন্ত এগুলি প্রয়োগ হবে না।
গৌথিয়ার

@ বাটলবাটকাস - পুরো সিস্টেমের পরিবর্তে কেবলমাত্র একজন ব্যবহারকারীর পছন্দ পরিবর্তন করতে পারে। উবুন্টুতে সিস্টেম-প্রশস্ত .bashrc ফাইলটি হ'ল /etc/bash.bashrc
উইলসি

1
@ShubhamA। ওএসএক্স আচরণের জন্য এই প্রশ্নটি দেখুন
jandersen

253

একটি উপনাম তৈরি করার জন্য অনেকগুলি উপায় রয়েছে। সর্বাধিক ব্যবহৃত উপায়গুলি হ'ল:

  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'

71
ব্যবহারের জন্য +1 ~/.bash_aliases
üন্দ্রিক

হ্যাঁ, এলিয়াসগুলির জন্য অন্য ফাইলটি ব্যবহার করা অনেক বেশি পরিষ্কার, ডিস্ট্রোসের মধ্যেও বহনযোগ্য। আমি সেই ফাইলটি ব্যবহার করি কারণ কিছু এলিফ পর্যাপ্ত নয় এবং একটি ফাংশন প্রয়োজন। সুতরাং আপনি যদি সেই কাজের পরিবর্তে কোনও ফাইল ব্যবহার করেন তবে এটি আরও বেশি পরিষ্কার clean আমার আরেকটি নাম -> রয়েছে alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", সুতরাং উপনামটি সংরক্ষণে উপকার পেয়েছে এবং আপনি যদি কিছু ভুল করেন তবে এটি আপনাকে বিজ্ঞাপন দেবে।
erm3nda

কোনওরকমভাবে আমি ওরফে যুক্ত করার পরে যেমন alias ls='ls -althr'দেওয়া হয়েছে, প্রদত্ত কিছু পতাকা কার্যকর হবে না, এক্ষেত্রে -t পতাকা কার্যকর হবে না। তুমি কি জানো কেন?
সাজুউক

3
ডিফল্টরূপে ~/.bashrcএটি অন্তর্ভুক্ত রয়েছে ~/.bash_aliases, এটি সম্পাদনা করার দরকার নেই।
জাক্কো

1
উবুন্টু টার্মিনাল উইন্ডোজ 10 এর সাথে আমার ক্ষেত্রে যেমন ~ / .bashrc অন্তর্ভুক্ত থাকে তখনই এই সমাধানটি খুব কার্যকর হয়।
জোসে

19

আমার কাছে মনে হচ্ছে আপনার একমাত্র সমস্যাটি যখন। এক্সক্লুসিভ না হয় তখন কেবল .Bashrc কার্যকর করার চেষ্টা করে। তবে এটি এটি করার সঠিক উপায় নয়; আপনি যখনই এই ফাইলে কোনও পরিবর্তন করেন, আপনার কমান্ড দ্বারা এটি "চালানো" উচিত:

source ~/.bashrc

অন্যথায়, এটি সহজেই একটি নতুন শেল তৈরি করবে, নতুন শেলের পরিবেশে ফাইলটি কার্যকর করবে, তারপরে যখন পরিবেশটি প্রস্থান করবে তখন त्या পরিবেশটি ত্যাগ করুন, যার ফলে আপনার পরিবর্তনটি হারাবে। স্ক্রিপ্টটি সোর্স করে এটি বর্তমান শেলের মধ্যেই কার্যকর করে, তাই এটি কার্যকর থাকবে।

আমি ধরে নিচ্ছি দ্বিতীয় ত্রুটিটি কারণ বাশ_লিয়াসগুলির অস্তিত্ব নেই। এটি প্রয়োজন হয় না, কেবলমাত্র আপনার পরিবর্তনগুলি পৃথক ও সংগঠিত রাখার জন্য প্রস্তাবিত। এটি কেবলমাত্র বিদ্যমান থাকলে ব্যবহৃত হয় এবং আপনি এটির জন্য পরীক্ষাটি দেখতে পারেন।

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

এটি বলে যে ফাইলটি যদি ~ / .bash_aliases উপস্থিত থাকে তবে এটি চালান।



1
sourceকমান্ডটি ব্যবহার করে আমার এলিয়াস কাজ করেছে। +1
ডিসপেসেজেস

4
কেবল সম্পূর্ণতার জন্য: লাইনের প্রাথমিক বিন্দুর . ~/.bash_aliasesশেল বিল্ট-ইন কমান্ডের একই অর্থ রয়েছে source। আমি কী চলছে তা ব্যাখ্যা করে এটি সঠিক উত্তর বলে মনে করি।
মেলিবিয়াস

17

সমস্যাটি হ'ল আপনি একটি নির্বাহযোগ্য ফাইল কার্যকর করার চেষ্টা করছেন: আপনি এটি দিয়ে এটি পরীক্ষা করতে পারেন:

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

নোট করুন যে প্রথম কলামে কোনও "এক্স - এক্সিকিউটেবল" অক্ষর নেই (ফাইলের অনুমতি)।

প্রোফাইল ফাইলগুলি এক্সিকিউটেবল ফাইল নয়, এগুলি কার্যকর করার পরিবর্তে আপনি এগুলি লোড করে:

source /home/bakhtiyor/.bashrc

অথবা

. /home/bakhtiyor/.bashrc

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

এটি একটি উদাহরণ যা আমি সন্ধান করছিলাম, টার্মিনালে কয়েকটি অক্ষর টাইপ করার একটি উপায় ("vps") একটি সার্ভারে দূরবর্তীভাবে লগ ইন করতে এবং এক্স 11 ফরোয়ার্ডিং সক্ষম করতে যাতে আমি নেটওয়ার্কের মাধ্যমে "জিডিট" এর মতো গুঁই অ্যাপস চালাতে পারি।

কমান্ড / অ্যালাইজড কমান্ড যাই হোক না কেন, ইকো স্টেটমেন্ট, উদ্ধৃতি চিহ্ন এবং একটি ফাইলের (>>) কমান্ডের আউটপুট সংযুক্ত করার জন্য এই চিহ্নটি আমার পক্ষে কাজ করে। আপনার প্রয়োজনীয় উপন্যাস কমান্ডের জন্য আমার কমান্ডটি প্রতিস্থাপন করুন এবং এটি আপনার টার্মিনালে প্রবেশ করুন।


এখানে উদ্ধৃতিটি কিছুটা জটিল। এই উদাহরণে, ডাবল উদ্ধৃতিগুলি ব্যবহার করা অযৌক্তিক, তবে যদি উদ্ধৃতিগুলির মধ্যে লেখাটিতে ডলারের চিহ্ন, ব্যাকস্ল্যাশ ইত্যাদি থাকে তবে আপনাকে বুঝতে হবে শেলটি কীভাবে ডাবল কোটের মধ্যে তাদের প্রসেস করে। আপনি বাইরের একক উদ্ধৃতিতে এবং অভ্যন্তরে ডাবল উদ্ধৃতিগুলিতে স্যুইচ করতে পারেন, তবে আপনার তখনও বুঝতে হবে বাশ কীভাবে ওরফে সংজ্ঞাতে ডাবল উদ্ধৃতি প্রক্রিয়াকরণ করে।
ট্রিপলি

5

আপনি যদি রুবি ব্যবহার করছেন, আপনি রুবিজেম ব্যবহার করে উফ ইনস্টল করতে পারেন।

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

রুবিজেম আপনার ডট ফাইলটিকে স্বয়ংক্রিয় উত্স করবে যাতে আপনার প্রয়োজন হয় না। এটা দেখ.


4

আমি এই নতুন সহায়কটি দ্রুত তৈরি করার জন্য এই সহায়ক ফাংশনটি লিখেছিলাম এবং তারপরে উপন্যাসের সংজ্ঞাটি লিখুন ~/.bash_aliases (যদি তা বিদ্যমান থাকে) বা ~/.bashrc

টিআইপি : সুনিশ্চিত ~/.bash_aliasesরয়েছে এবং এটি কার্যকর করা হয়েছে ~/.bashrc

# -----------------------------------
#  Create a new permanent bash alias
#
#  @param $1 - name
#  @param $2 - definition
# -----------------------------------
new-alias () { 
  if [ -z "$1" ]; then
    echo "alias name:" && read NAME
  else
    NAME=$1
  fi

  if alias $NAME 2 > /dev/null > /dev/null; then
    echo "alias $NAME already exists - continue [y/n]?" && read YN
    case $YN in
      [Yy]* ) echo "okay, let's proceed.";;
      [Nn]* ) return;;
      * ) echo "invalid response." && return;;
    esac
  fi

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

  if [ -f ~/.bash_aliases ]; then
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bash_aliases
  else
    echo "alias $NAME=\"$DEFINTION\"" >> ~/.bashrc
  fi

  alias $NAME="$DEFINTION"
}

1
ভাল ধারণা, তবে এই ফাংশনটি অযত্নে ব্যবহার .bashrcকরা একাধিক aliasকমান্ডের কমান্ডের সাথে ট্র্যাশ হতে পারে । এই জাতীয় গোলমাল এড়াতে আপনার ফাংশনটিতে অবশ্যই কিছু চেকআপ বাস্তবায়ন করা দরকার।
সমস্যা সমাধানকারী-ডিভি

এটি একটি বৈধ পয়েন্ট। আপনার কাছে কি কোনও প্রস্তাবিত কর্মসংস্থান রয়েছে যা আপনি @ সমস্যা সমাধানকারী-ডিভি ভাগ করতে ইচ্ছুক?
blizzrdof77

এটি পরে প্রকৃত 2 1 / 2yo পরে আছে কিনা তা নিশ্চিত করুন, তবে ... প্রথমে আমি আরসিটিকে গ্রাহক করতাম উলেফ কমান্ডগুলি পরীক্ষা করার জন্য, যদি নকলটি এড়ানোর জন্য এই উরফটি ইতিমধ্যে সেখানে প্রবেশ করা হয়েছিল কিনা। কোনও উপাধির অস্তিত্বের জন্য আপনার চেক যথেষ্ট নয়, কারণ আরসি ইতিমধ্যে একই নামের একাধিক উপস্ব দিয়ে "দূষিত" হতে পারে।
সমস্যা সমাধানকারী-ডিভি

0

আমি ব্যবহার করার পরামর্শ দিতে হবে /etc/bash.bashrc

আপনি এই ফাইলটির শেষে লাইন যুক্ত করতে পারেন।

alias ok="ping google.com"

প্রতি লাইনে এলিয়াস রাখার পরে আপনাকে পুনরায় বুট করতে হবে বা পুনরায় চালু করতে হবে।


7
"আমি পরামর্শ দেব .." এবং আপনি কেন এটি পরামর্শ করবেন?
মুড়ু

2
আপনি যদি বিশেষভাবে সমস্ত ব্যবহারকারীর জন্য সিস্টেম-ওয়াইড সেটিংস ইনস্টল করতে না চান তবে আপনার সিস্টেম ফাইলের সাথে গোলযোগ করা উচিত নয়। একটি ব্যক্তিগত সিস্টেমে, পার্থক্যটি প্রান্তিক, তবে তারপরে সিস্টেম ফাইলগুলির সাথে জগাখিচা করা রাস্তায় আরও জটিল হয়ে পড়ে, তাই আপনার নিজের ব্যক্তিগত ডট ফাইলগুলি ব্যক্তিগত পছন্দগুলির জন্য সম্ভবত পছন্দ করা উচিত (এবং সেটিংসের অন্য কোথাও অনুলিপি করা আরও সহজ করে তোলে ভবিষ্যতেও)।
ট্রিপলি

1
পুনরায় চালু করবেন? এটি সত্যিই ভয়ানক পরামর্শ, এটি করবেন না, বিশেষত যখন source /etc/bash.bashrcএই উদাহরণে আপনি যা চান তা করেন। তবে ব্যবহার করা উচিত ~/.bashrcবা ~/.bash_aliasesপরিবর্তে
Xen2050

@ Xen2050, আমি পুনরায় বুট / পুনরায় চালু করার পরে এটি কাজ করে তা দেখানোর জন্য পুনরায় বুট করার পরামর্শ দিয়েছি। যাইহোক, এমনকি অন্য একটি পরিষ্কার টার্মিনাল উইন্ডোও কাজ করবে।
ফাহাদ আহমাদ

1
আপনি রিবুট ছাড়াই একটি নতুন কার্নেল আপগ্রেড করতে পারেন, এটি পুরানো উইন্ডোজ নয় ;-)
Xen2050

0

যেমনটি আমি স্মরণ করি, bashrcআছে বা আছে, একটি লাইন এটি সরাসরি এলিয়াসগুলির জন্য না ব্যবহার করার পরামর্শ দেয়। সমাধান একটি বহিস্থিত ফাইল (গুলি) ব্যবহার করা হয়। fooএবং baralias লেখা যোগ করা হয়েছে, কিন্তু যোগ করার জন্য ফাইল "sourced" প্রাপ্তবয়স্ক হতে হবে (শুধু একটি নতুন টার্মিনাল খুলুন)। উদাহরণ হিসাবে:bazbashrc

thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ cat .bash_aliases 
alias foo='echo foo'
alias bar='echo foo'
alias baz='echo baz'

thufir@dur:~$ 
thufir@dur:~$ source .bashrc 
thufir@dur:~$ 
thufir@dur:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias bar='echo foo'
alias baz='echo baz'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias foo='echo foo'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
thufir@dur:~$ 
thufir@dur:~$ baz
baz
thufir@dur:~$ 

এখন bazওরফে কাজ করে। আমি কেবল এখনই বুঝতে পেরেছি যে পূর্ববর্তী উত্তরটিতে এই কৌশলটি উল্লেখ করা হয়েছিল তবে তারা লিডটি সমাহিত করেছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.