Kalıcı bir Bash takma adı nasıl oluşturabilirim?


381

rmBu komutu yürüttükten sonra onay mesajı almak için komuta bir takma ad oluşturmak istiyorum . Böylece böyle bir takma ad oluşturuyorum alias rm='rm -i'. Ama bildiğim kadarıyla bu geçici bir takma ad ve siz terminali kapatana kadar yaşıyor.

Takma adı kalıcı olarak kaydetmek için burada açıklandığı gibi , terminalde çalıştırmam ~/.bash_aliasesya da ~/.bashrckomut vermem ve takma adımı buraya eklemem gerekiyor. Ancak yürütürken ~/.bashrcaşağıdaki hata iletisini alıyorum:

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

Çalıştırdığımda ~/.bash_aliasesböyle bir hata mesajı daha alıyorum:

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

Asıl sorun nedir ve nasıl çözebilirim?



alias rm='rm -i'rasgele rm kullanma sorunu çözmüyor
qwr

Yanıtlar:


428

Bir takma ad oluşturmak için takma adı kalıcı olarak .bashrcdosyaya ekleyin.

gedit ~/.bashrc

Ve sonra takma adınızı aşağıya ekleyin.

alt metin

Şimdi . ~/.bashrcterminalinizde yürütün ( .ve ile arasında bir boşluk olmalıdır ~/.bashrc.

Şimdi takma adınızı kontrol edebilirsiniz.

alt metin


5
. Yazdığınız karthick87 @ ".. Şimdi ~ senin terminalde / .bashrc (arasında bir boşluk bulunmalıdır yürütmek ve ~ / .bashrc" Bu adım neden gerekli?
Geek

5
ilk ne yapar? içeri. ~ / .bashrc?
Zen,

22
@Geek @Zen "Çalıştır" doğru terim değildi. Nokta eşittir source. Bununla birlikte . ~/.bashrc, bashını kaynakladın. Dosyanın çalıştırılması bir alt işlem başlatır, bu işlemdeki komutları çalıştırır ve sonra geri döner. Çocuk işleminde yapılanların ana işlem üzerinde (uyguladığınız bash) etkisi yoktur. Bunun yerine, kaynak (nokta ile), dosya içeriğini terminalde yazmış gibi davranırsınız. Senin istediğin bu. .bashrcbir bash her başladığınızda kaynaklanır. Değişiklikler yaparsanız, elle yeni bir bash veya kaynak başlatana kadar geçerli olmazlar.
Gauthier

@ButtleButkus - tüm sistem yerine yalnızca bir kullanıcının tercihlerini değiştirmek isteyebilir. Ubuntu'da sistem genelinde .bashrc dosyası /etc/bash.bashrc
WillC

1
@ShubhamA. OSX davranışı için bu soruya bakın
jandersen

253

Takma ad oluşturmanın birçok yolu vardır. En çok kullanılan yollar:

  1. Doğrudan ~/.bashrcdosyaya takma ad ekleyin

    Örneğin: bu satırı ~/.bashrcdosyaya ekle

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

    (Eğer / in çıkış yapmış veya yaptıktan sonra dahaki sefere . ~/.bashrcyazarken) komutu çalıştırılacaktır.rmrm -i

  2. İkinci yöntem, ayrı bir takma ad dosyası oluşturmanıza izin verir, böylece onları koymak zorunda kalmazsınız .bashrc, fakat seçtiğiniz bir dosyaya. Öncelikle, ~/.bashrcdosyanızı düzenleyin ve henüz mevcut değilse aşağıdaki satırları ekleyin ya da varsa açıklamasını yapın:

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

    Kaydet ve dosyayı kapat. Bundan sonra tek yapmanız gereken bir ~/.bash_aliasesdosya oluşturmak ve takma adlarınızı ilk yöntemde belirtilen biçimde buraya eklemek.

    Dosyamın içeriği ~/.bash_aliases:

    alias cs='cd;ls'

71
Kullanmak için +1 ~/.bash_aliases.
ændrük

Evet, takma adlar için başka bir dosya kullanmak çok daha temiz, dağıtımlar arasında da taşınabilir. Bu takma adı kullanıyorum çünkü bazı takma adlar yeterli değil ve bir fonksiyon gerekli. Bu nedenle, bu görev için bir dosya kullanırsanız daha temiz olur. Başka bir takma adım var -> alias aliases="xdg-open ~/.bash_aliases && source ~/.bash_aliases", bu nedenle takma ad tasarrufta boşa gitti ve bir hata yaparsanız size reklam verir.
erm3nda

Bir şekilde takma adı ekledikten sonra alias ls='ls -althr', verilen bayrakların bazıları etkili olmaz, bu durumda -t bayrağı etkili olmaz. neden biliyor musun?
Sajuuk

3
Varsayılan olarak ~/.bashrciçeriğe sahip olmak ~/.bash_aliases, düzenlemeye gerek yok.
Jaakko

1
Her zaman değil ~ / .bashrc benim durumumda olduğu gibi ~ / .bash_aliases için içerdiği içerir.
Jose

19

Bana göre tek problemin sadece çalıştırılabilir olmadığı zamanlarda .bashrc'yi çalıştırmaya çalışmak. Ancak bunu yapmanın doğru yolu bu değildir; Bu dosyada bir değişiklik yaptığınızda, komutla "çalıştırmalısınız":

source ~/.bashrc

Aksi takdirde, yeni bir kabuk oluşturur, dosyayı yeni kabuğun ortamında yürütür, sonra çıktığında o ortamı atar ve böylece değişikliklerinizi kaybeder. Komut dosyasını kaynaklayarak, geçerli kabuk içinde yürütülür, böylece etkin kalır.

Sanırım ikinci hatanın bash_aliases olmamasıydı. Bu gerekli değildir, yalnızca değişikliklerinizi ayrı ve düzenli tutmanız önerilir. Yalnızca varsa, kullanılır ve bunun için testi .bashrc'de görebilirsiniz:

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

Bu, eğer ~ / .bash_aliases dosyası varsa, çalıştır.


~/.bash_aliasesdaha iyi. askubuntu.com/questions/194111/…
tomByrer

1
sourcekomutu kullanarak takma isimlerimi çalıştırdı. +1
dspacejs

4
Sadece tamlık için: Satırdaki ilk nokta . ~/.bash_aliases, kabuk yerleşik komutuyla aynı anlama gelir source. Bunu, neler olduğunu açıklayan doğru cevap olarak buluyorum.
Melebius

17

Sorun, çalıştırılamayan bir dosyayı çalıştırmaya çalışıyor olmanızdır: Bunu kontrol edebilirsiniz:

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

Not: İlk sütunda "x - çalıştırılabilir" harfi yoktur (dosya izinleri).

Profil dosyaları çalıştırılabilir dosyalar değildir; yürütmek yerine bunları bunlarla yüklersiniz:

source /home/bakhtiyor/.bashrc

veya

. /home/bakhtiyor/.bashrc

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

Bu, bir sunucuya uzaktan oturum açmak ve X11 iletmeyi etkinleştirmek için terminalde birkaç harf ("vps") yazmanın ve X11 iletmeyi etkinleştirmenin bir yolunu aradığım bir örnektir, böylece ağ üzerinden "gedit" gibi gui uygulamaları çalıştırabilirim.

Komut / aliased komutu ne olursa olsun, echo ifadesi, tırnak işaretleri ve bir komutun çıktısını bir dosyaya (>>) eklemek için kullanılan sembol bu şekilde benim için çalışır. İhtiyacınız olan alias komutunun komutunu değiştirin ve terminalinize girin.


Burada alıntı biraz zor. Bu örnekte, çift tırnak kullanmak problemsizdir, ancak tırnak içindeki metin dolar işareti, ters eğik çizgi vb. İçeriyorsa, kabuğun bunları çift tırnak içinde nasıl işlediğini anlamanız gerekir. Dıştaki tek tırnaklara ve içteki çift tırnaklara geçebilirsiniz, ancak daha sonra Bash'in takma ad tanımındaki çift tırnakları nasıl işlediğini anlamanız gerekir.
üçlü

5

Eğer yakut kullanıyorsanız, rubygem kullanarak aka yükleyebilirsiniz.

gem install aka2

kullanım

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, nokta dosyanızı otomatik olarak besler ve böylece gerek kalmaz. Bunu kontrol et.


4

Bu yararlı işlevi hızlıca yeni bir takma ad oluşturmak için yazdım ve sonra takma ad tanımını ~/.bash_aliases (varsa) veya üzerine yazdım ~/.bashrc.

İPUCU : Var ~/.bash_aliasesolduğundan ve içinde çalıştırıldığından emin olun ~/.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
İyi fikir, ancak bu fonksiyonun dikkatsiz kullanılması, .bashrcbirden çok aliaskomut örneği ile çakılmaya yol açabilir . Bu tür karışıklıktan kaçınmak için işleviniz kesinlikle bazı kontroller uygulamak zorunda.
Troublemaker-DV

Bu geçerli bir nokta. Troublemaker-DV @ @ paylaşmaya istekli olduğunuz önerilmiş bir geçici çözüm var mı?
blizzrdof77

Hala 2 / 2yo sonra hala gerçek olup olmadığından emin değilsiniz, ancak ... İlk adımda, RC'yi diğer ad komutları için, bu takma adın çoğaltılmaması için zaten oraya girilip girilmediğini kontrol etmesini isterim. Bir takma adın olup olmadığına dair kontrolünüz yeterli değil, çünkü RC zaten aynı isimde birden fazla takma ad ile "kirlenmiş" olabilir.
Troublemaker-DV

0

Kullanmanızı öneririm /etc/bash.bashrc

Bu dosyanın sonuna bir satır ekleyebilirsiniz.

alias ok="ping google.com"

Satır başına takma adları yerleştirdikten sonra yeniden başlatmanız veya yeniden yapılandırmanız gerekir.


7
“Ben öneririm ..” ve neden bunu önerdin?
muru

2
Tüm kullanıcılar için sistem genelinde bir ayar yüklemek istemiyorsanız, sistem dosyasıyla uğraşmamanız gerekir. Kişisel bir sistemde fark marjinaldir, ancak daha sonra sistem dosyaları ile uğraşmak yoldan daha karmaşıktır, bu nedenle kişisel tercihler için muhtemelen kendi kişisel nokta dosyalarınızı tercih etmelisiniz (ve bu, ayarları başka bir yere kopyalamayı kolaylaştırır). gelecek de).
üçlü

1
Yeniden başlatılsın mı? Bu gerçekten korkunç bir tavsiye, yapmayın, özellikle source /etc/bash.bashrcde bu örnekte istediğiniz tüm ne zaman . Ama kullanmalı ~/.bashrcya da ~/.bash_aliasesyerine
Xen2050

@ Xen2050, yeniden başlatma / yeniden başlatma işleminden sonra çalıştığını göstermek için yeniden başlatmayı önerdim. Bu arada, bir başka temiz terminal penceresi de çalışacaktır.
Fahad Ahammed

1
Yeniden başlatmadan yeni bir çekirdeğe yükseltebilirsiniz, bu eski pencereler değildir ;-)
Xen2050

0

Hatırladığım kadarıyla, bashrconu doğrudan takma adlar için kullanmamaya öneren bir çizgi var ya da vardı. Çözelti bir dış dosya (lar) kullanmaktır. fooVe bardiğer adlar eklenmiştir, ancak eklemek için (sadece yeni bir terminal açın veya) dosyası "kaynaklı" olmalıdır. Örnek olarak: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:~$ 

şimdi baztakma ad çalışıyor. Daha şimdi fark ettim ki, önceki bir cevap bu teknikten bahsetmişti , ancak Lede'yi gömdüler.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.