Bash takma adları , tek tek ev dizinlerindeki dosyalara .bash_aliases
veya .bashrc
dosyalara girmelidir . Eğer global bash takma isimleri oluşturmanız gerekiyorsa, içeri girebilirler /etc/bash.bashrc
, ancak yeni oluşturulan kullanıcılar tarafından miras almaları için dosyalara .bash_aliases
veya .bashrc
dosyalara eklemek genellikle en iyisidir /etc/skel
.
Öyle hemen hemen her zaman yanlış içinde bir takma ad tanımlamak için .profile
, .bash_profile
ya da /etc/profile
.
Nedenini anlamak için , bu dosyaların her birinde hangi koşullar altında komutların çalıştırıldığını anlamak gerekir . Aşağıda ele aldığım bu konuda yanlış anlamalar var.
Birden fazla kullanıcı için takma ad tanımlamak istemeseniz de, bireysel kullanıcılar için nasıl tanımlandıklarını bilmelisiniz, böylece ihtiyacınız olan en iyi yöntemi seçmeye karar verebilirsiniz.
Bireysel Kullanıcılar için Takma Adlar
Özellikle bir GUI kullanıyorsanız, etkileşimli mermilerinizin çoğu muhtemelen giriş yapmayan mermilerdir. Hiçbir zaman bir GUI kullanmasanız bile, muhtemelen hala bazı sıklıklarda oturum açma kabukları kullanmıyorsunuzdur . Takma adlarınızın bu kabuklarda çalışmasını istersiniz.
Özellikle grafiksel olmayan bir sanal konsolda veya SSH üzerinden giriş yaparsanız, muhtemelen bazı durumlarda oturum açma kabukları kullanırsınız. Böylece takma adlarınızın etkileşimli giriş kabukları içinde çalışmasını istersiniz.
Etkileşimli, giriş yapmayan bir kabuk başladığında , .bashrc
kullanıcının giriş dizininden kaynaklanır . Ubuntu'da varsayılan olarak , varsa , her kullanıcının .bashrc
kendisi kaynaklarıdır .bash_aliases
.
- To kaynağı bir dosya içeriği çalışmasına neden olmaktır akım kabuk. Kaynaklı bir dosyada yapılan kabuk ortamındaki değişiklikler, dosyadaki tüm komutlar çalıştırıldıktan sonra bile devam eder.
Ubuntu'nun varsayılan yorumları okurken .bashrc
o olduğunu ortaya koymaktadır resmen amaçlanan diğer adlar koyulması .bashrc
veya .bash_aliases
. .bashrc
Zaten bazı takma ad tanımları ( grep '^[[:blank:]]*alias' ~/.bashrc
bunları görmek için çalıştırın ) içerir ve yeni tanımları nereye koyacağınız konusunda açık bir tavsiye sunar:
# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
Peki etkileşimli giriş kabukları ne olacak ? Bunun yerine .bashrc
, giriş kabukları kaynağı .profile
.
- ... Var
.bash_login
olmadığı sürece , onun yerine kaynaklanır.
- ... Var
.bash_profile
olmadığı sürece , onun yerine kaynaklanır.
Ancak, iyi haber Ubuntu varsayılan olarak, yani içinde komutlar .bashrc
olacak da etkileşimli giriş kabukları çalıştırmak varsayılan çünkü .profile
şimdiki kabuk bash olup olmadığını kontrol eder (ve eğer .bashrc
mevcutsa) ve eğer öyleyse, kaynakları .bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Kullanıcıların .bash_aliases
ana dizinlerinde yeni bash takma adları tanımlamasını öneririm (önceden mevcut değilse oluşturma). Bu, takma ad tanımlarını kullanıcı başına kalıcı hale getirmek için özellikle temiz ve basit bir yoldur.
Takma adlar gerekir değil tanımlanmalıdır.profile
onlar dışı giriş kabukları içinde tanımsız kalır çünkü. Bir bash kabuğunun ortamının çok farklı olarak, diğer adlar vardır değil çocuk kabukları ihraç:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
Özellikle, varsayılan olarak çoğu masaüstü ortamı .profile
grafiksel oturum açmadan kaynaklanır, ancak:
- Bu mutlaka bir bash kabuğu tarafından yapılmaz, bu nedenle diğer ad tanımları bile işlenmeyebilir ve daha da önemlisi
- Diğer ad tanımları işlense bile, alt işlemlere geçirilmez . Özellikle, bir Terminal penceresi açılarak oluşturulan mermilere geçmezler!
Takma adlar .bash_profile
(veya .bash_login
) içinde aynı nedenle tanımlanmamalı, aynı zamanda başka bir nedenle de tanımlanmalıdır. Doğal olarak bu dosyalardan birini oluşturmak ve sadece takma ad tanımlarını koymak , kodun .profile
çalışmasını engeller !
Yararlı .bash_profile
veya .bash_login
gerçekten yararlı olduğu durumlarda , tipik olarak içlerinde bir .profile
yerde bir kaynak bulunur ve bu problemi çözer. (O zaman geriye kalan tek sorun, .profile
içerisinde takma ad tanımlamak .bash_profile
veya .bash_login
doğru çalışmadığıdır.)
İçin adlar Yeni Otomatik Bireysel Kullanıcılar,
Gerçek bir insanı temsil etmeyi amaçlayan türde bir kullanıcı hesabı oluşturulduğunda, tipik olarak ana dizini olarak kullanılmak üzere yeni bir dizin oluşturulur. İçeriği /etc/skel
daha sonra ana dizine kopyalanır. Birden çok kullanıcının kendi dizinlerindeki bazı benzer yapılandırma dosyalarıyla başlaması bu şekildedir. Ubuntu, bu içerir .profile
, .bashrc
ve diğer bazı dosyaları.
Yeni kullanıcılar için hangi takma adların tanımlandığını değiştirmek için basitçe onları /etc/skel/.bash_aliases
(oluşturmanız gerekir) yerleştirebilirsiniz /etc/skel/.bashrc
.
Zaten var olan bir dosyayı düzenlerseniz, önce /etc/skel
onu yedeklemek isteyebilirsiniz - ancak yedeği koymamanız gerekir /etc/skel
, yoksa onu da yeni kullanıcıların ana dizinlerine kopyalarsınız.
Bu, birden fazla kullanıcı için yeni takma ad eklemeniz için en iyi yoldur. Mevcut kullanıcılar takma adları kendileri ekleyebilir. Takma adları tanımlarsanız, /etc/skel/.bash_aliases
basitçe onları kendi dizinlerine kopyalamayı seçebilecekleri bir dosyaya yönlendirebilirsiniz (veya kendi özel .bash_aliases
dosyalarına ekleyin ).
Bir kullanıcının takma adı tanımlaması çok önemlidir. Ek olarak, diğer adlar son derece sağlam değildir ; sadece belirli durumlarda çalışırlar. Sürekli çalışan yeni bir komut oluşturmanız gerekirse, herkes için bu komutu bir diğer ad olarak uygulamamalısınız. Ayrıca, takma adları istemeyen kullanıcılara başarıyla zorlayamazsınız - basitçe onlar yapabilir unalias
.
Tüm Kullanıcılar İçin Global Takma Adlar
Ben bu yaklaşımı önlemek için tavsiye rağmen, olabilir de takma adları tanımlayan küresel /etc/bash.bashrc
dosyası. Ardından hem etkileşimli oturum açma olmayan kabuklar hem de etkileşimli oturum açma kabukları için tanımlanacaktır. Nedeni, daha önce kullanıcının ana dizindeki dosyaların herhangi kaynaklıdır:
- Giriş kabukları (ve sadece giriş kabukları ve giriş kabukları gibi davranan diğer işlemler)
/etc/profile
otomatik olarak komutları çalıştırın .
- Yalnızca oturum açma kabukları
/etc/bash.bashrc
otomatik olarak komutları çalıştırmaz , ancak
- Ubuntu'nun varsayılanı
/etc/profile
, çalışan kabuğun bash olup /etc/bash.bashrc
olmadığını (ve varsa) ve varsa kaynak olup olmadığını kontrol eder /etc/bash.bashrc
.
Kabuk bash ise ( .profile
kullanıcı .bashrc
yukarıda açıklandığı gibi) varsayılan kullanıcı başına kullanıcı başına nasıl kaynaklandığına benzer .
İşte bunun için gerçek kod varsayılan olarak şöyle görünür /etc/profile
:
if [ "$PS1" ]; then
if [ "$BASH" ] && [ "$BASH" != "/bin/sh" ]; then
# The file bash.bashrc already sets the default PS1.
# PS1='\h:\w\$ '
if [ -f /etc/bash.bashrc ]; then
. /etc/bash.bashrc
fi
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi
Bu blok diğer görevleri de yerine getirir. Spesifik olarak, dış if
kabuğun etkileşimli olup olmadığını kontrol eder (bilgi istemi metninin boş olmadığını kontrol ederek), ardından mevcut kabuğun bash olup olmadığını kontrol eder ve kaynak /etc/bash.bashrc
olup olmadığını ve bazı işler yapmazsa, , zaten yapıldı /etc/bash.bashrc
.
Sen gerektiğini değil küresel adlar tanımlamak /etc/profile
aynı nedenle kullanıcıların kendi yerel onları tanımlamak gerekir için .profile
s: bunu yaparsanız, onlar çocuklarının kabukları için sadece giriş kabukları için tanımlanan ve edilmeyecektir.
Son olarak, varsayılan kullanıcı başına farklı olarak, .bashrc
varsayılan /etc/bash.bashrc
dosyanın takma adlarla ilgili hiçbir şey içermediğine dikkat edin. Kullanıcılara, takma adlarını düzenleyemeyecekleri veya devre dışı bırakamadıkları bir dosyada takma ad vermek biraz alışılmadık bir durumdur. (Elbette, hala edebilirsiniz kendi yerel onların tanımları geçersiz kılarak, bunu .bashrc
, .bash_aliases
başka yerde ya.)
Daha fazla okuma