Alias Bash harus masuk .bash_aliases
atau .bashrc
file dalam direktori home masing-masing. Jika Anda harus membuat alias global bash, mereka bisa masuk /etc/bash.bashrc
, tetapi sering kali lebih baik menambahkannya ke file .bash_aliases
atau .bashrc
di /etc/skel
sehingga mereka diwarisi oleh pengguna yang baru dibuat.
Hal ini hampir selalu salah untuk mendefinisikan alias di dalam .profile
, .bash_profile
atau /etc/profile
.
Untuk memahami alasannya, seseorang harus memahami dalam situasi apa perintah dari masing-masing file ini dijalankan. Ada kesalahpahaman tentang ini, yang saya bahas di bawah ini.
Meskipun Anda ingin mendefinisikan alias untuk banyak pengguna, Anda harus terbiasa dengan bagaimana mereka didefinisikan untuk masing-masing pengguna, sehingga Anda dapat memutuskan metode terbaik untuk melakukan apa yang Anda butuhkan.
Alias untuk Pengguna Perorangan
Terutama jika Anda menggunakan GUI, sebagian besar kerang interaktif Anda mungkin non-login . Bahkan jika Anda tidak pernah menggunakan GUI, Anda mungkin masih menggunakan shell non-login dengan frekuensi tertentu. Anda ingin alias Anda berfungsi di shell ini.
Terutama jika Anda pernah masuk secara non-grafis di a konsol virtual atau melalui SSH , Anda mungkin sering menggunakan shell login. Jadi, Anda juga ingin alias Anda berfungsi di shell login interaktif.
Ketika shell interaktif, non-login dimulai , itu sumber.bashrc
di direktori home pengguna. Secara default di Ubuntu, setiap pengguna itu .bashrc
sendiri sumber .bash_aliases
, jika ada.
- Untuk sumber file adalah untuk menyebabkan isinya yang akan dijalankan di saat shell. Perubahan pada lingkungan shell yang dibuat dalam file yang bersumber tetap ada bahkan setelah semua perintah dalam file telah dijalankan.
Membaca komentar dalam default Ubuntu .bashrc
mengungkapkan bahwa secara resmi dimaksudkan alias masuk .bashrc
atau .bash_aliases
. .bashrc
sudah mengandung beberapa definisi alias (jalankangrep '^[[:blank:]]*alias' ~/.bashrc
untuk melihatnya), dan memberikan saran eksplisit tentang di mana harus menempatkan definisi baru tersebut:
# 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
Tapi bagaimana dengan shell login interaktif ? Dari pada.bashrc
, login sumber shells .profile
.
- ... Kecuali
.bash_login
ada, maka itu akan bersumber.
- ... Kecuali
.bash_profile
ada, maka itu akan bersumber.
Namun, kabar baiknya adalah bahwa secara default di Ubuntu, perintah di juga.bashrc
akan berjalan di shell login interaktif karena default .profile
memeriksa apakah shell saat ini adalah bash (dan jika .bashrc
ada), dan jika demikian, sumber .bashrc
:
# if running bash
if [ -n "$BASH_VERSION" ]; then
# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
Saya menyarankan pengguna mendefinisikan alias bash baru di .bash_aliases
dalam direktori home mereka (membuatnya jika belum ada). Ini adalah cara yang sangat bersih dan sederhana untuk membuat definisi alias permanen di tingkat per pengguna.
Alias tidak boleh didefinisikan.profile
karena mereka akan tetap tidak terdefinisi dalam shell non-login. Tidak seperti kebanyakan lingkungan bash shell, alias tidak diekspor ke shell anak:
ek@Io:~$ alias hi='echo "Greetings, $USER!"'
ek@Io:~$ hi
Greetings, ek!
ek@Io:~$ bash
ek@Io:~$ hi
hi: command not found
Secara khusus, secara default sebagian besar lingkungan desktop menyebabkan .profile
bersumber pada login grafis, tetapi:
- Ini belum tentu dilakukan oleh bash shell, jadi definisi alias bahkan mungkin tidak diproses, dan yang lebih penting
- bahkan jika definisi alias diproses, mereka tidak diteruskan ke proses anak . Khususnya, mereka tidak diteruskan ke shell yang dibuat dengan membuka jendela Terminal!
Alias tidak boleh didefinisikan dalam .bash_profile
(atau .bash_login
) karena alasan yang sama, tetapi juga karena alasan lain. Naif membuat salah satu dari file-file ini dan menempatkan adil alias definisi dalam mencegah salah kode di .profile
dari berjalan!
Dalam situasi di mana .bash_profile
atau .bash_login
benar - benar bermanfaat, biasanya satu sumber .profile
di suatu tempat di dalamnya, yang memecahkan masalah itu. (Maka satu-satunya masalah yang tersisa adalah bahwa, seperti dengan .profile
, mendefinisikan alias di.bash_profile
atau .bash_login
tidak berfungsi dengan benar.)
Alias untuk Baru Pengguna Perorangan , Secara Otomatis
Ketika akun pengguna dari jenis yang dimaksudkan untuk mewakili manusia nyata dibuat, direktori baru biasanya dibuat untuk berfungsi sebagai direktori rumah mereka. Konten /etc/skel
tersebut kemudian disalin ke direktori home mereka. Ini adalah bagaimana banyak pengguna memulai dengan beberapa file konfigurasi serupa di direktori home mereka. Di Ubuntu, ini termasuk .profile
,.bashrc
, dan beberapa file lainnya.
Untuk mengubah alias apa yang didefinisikan untuk pengguna baru, Anda cukup memasukkannya /etc/skel/.bash_aliases
(Anda harus membuatnya) atau /etc/skel/.bashrc
.
Jika Anda mengedit file yang sudah ada di dalam, /etc/skel
Anda mungkin ingin mencadangkannya terlebih dahulu - tetapi Anda tidak boleh memasukkan cadangannya /etc/skel
, atau file itu juga, akan disalin ke direktori home pengguna baru.
Ini mungkin cara terbaik bagi Anda untuk menambahkan alias baru untuk banyak pengguna. Pengguna yang sudah ada cukup menambahkan alias sendiri. Jika Anda mendefinisikan alias di /etc/skel/.bash_aliases
dalamnya, Anda bisa mengarahkan mereka ke file itu, yang dapat mereka pilih untuk disalin ke direktori home mereka (atau menambahkan ke .bash_aliases
file kustom mereka sendiri ).
Sepele bagi pengguna untuk tidak mendefinisikan alias. Selain itu, alias tidak terlalu kuat ; mereka hanya bekerja dalam keadaan tertentu. Jika Anda perlu membuat perintah baru yang berfungsi setiap saat, untuk semua orang , Anda tidak boleh mengimplementasikan perintah itu sebagai alias. Dan Anda tidak bisa berhasil memaksakan alias pada pengguna yang tidak menginginkannya - mereka bisa saja unalias
mereka.
Alias Global, untuk Semua Pengguna
Meskipun saya menyarankan Anda untuk menghindari pendekatan ini, Anda dapat mendefinisikan alias di file global /etc/bash.bashrc
. Mereka kemudian akan didefinisikan untuk shell non-login interaktif dan untuk shell login interaktif. Alasannya adalah, sebelum ada file di direktori home pengguna yang bersumber:
- Shell login (dan hanya shell login dan proses lain yang berperilaku seperti shell login) menjalankan perintah dari
/etc/profile
secara otomatis.
- Hanya shell non-login yang menjalankan perintah
/etc/bash.bashrc
secara otomatis, tetapi
- Default Ubuntu
/etc/profile
memeriksa apakah shell yang dijalankan adalah bash (dan jika /etc/bash.bashrc
ada) dan, jika demikian, sumber /etc/bash.bashrc
.
Ini analog dengan bagaimana sumber per pengguna default per .profile
pengguna .bashrc
jika shell adalah bash (seperti yang dijelaskan di atas).
Begini seperti apa kode sebenarnya untuk ini di default /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
Blok itu juga melakukan tugas-tugas lain. Secara khusus, bagian luar if
memeriksa apakah shell cenderung interaktif (dengan memeriksa bahwa teks prompt tidak kosong), kemudian memeriksa apakah shell saat ini adalah bash dan sumber /etc/bash.bashrc
jika itu, dan jika tidak melakukan beberapa pekerjaan itu, untuk bash , sudah dilakukan di/etc/bash.bashrc
.
Anda tidak boleh mendefinisikan alias global /etc/profile
karena alasan yang sama pengguna tidak harus mendefinisikannya di lokal mereka.profile
: jika Anda melakukannya, mereka akan ditentukan hanya untuk shell login, dan bukan untuk shell anak mereka.
Akhirnya, perhatikan bahwa, tidak seperti default per-pengguna .bashrc
, /etc/bash.bashrc
file default tidak mengandung apa pun tentang alias. Agak tidak lazim untuk memberikan alias kepada pengguna dalam file di mana mereka tidak dapat mengedit atau menonaktifkannya. (Tentu saja, mereka masih bisa melakukan itu, dengan menimpa definisi mereka di daerah mereka sendiri .bashrc
, .bash_aliases
atau di tempat lain.)
Bacaan lebih lanjut