Di server ketika saya login sebagai root saya melihat .bashrc
(Ubuntu 10.10).
Di Mac saya, saya punya .bash_profile
Apakah Ubuntu selalu hanya memiliki .bashrc
file dan tidak .bash_profile
? (Aku hanya bingung, jadi bertanya, aku sadar mereka berbeda, tapi mungkin ada hubungan entah bagaimana?)
Di server saya, saya ingin membuat alias, haruskah saya memasukkannya .bashrc
?
Bagaimana jika saya ingin alias ini diterapkan sehingga semua pengguna dapat menggunakannya?
Jawaban:
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.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:Tapi bagaimana dengan shell login interaktif ? Dari pada
.bashrc
, login sumber shells.profile
..bash_login
ada, maka itu akan bersumber..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
: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:Secara khusus, secara default sebagian besar lingkungan desktop menyebabkan
.profile
bersumber pada login grafis, tetapi: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:/etc/profile
secara otomatis./etc/bash.bashrc
secara otomatis, tetapi/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
: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
. .bash_profile
setiap kali saya membuat alias baru?sumber
Ini bacaan yang bagus . ".bash_profile dieksekusi untuk shell login, sedangkan .bashrc dieksekusi untuk shell non-login interaktif"
Jadi untuk alias Anda, gunakan .bash_profile
sumber
.bash_profile
tidak benar. Di Ubuntu,.profile
(yang berjalan untuk shell login) sumber.bashrc
ketika itu adalah shell bash interaktif. Dengan demikian menempatkan alias di.bashrc
(atau.bash_aliases
, bersumber di.bashrc
) mendefinisikan mereka di semua shell pesta interaktif. Alias dalam.bash_profile
menghasilkan masalah ini , antara lain. Lihat ini , itu , jawaban saya , dan~/.bashrc
komentar default merekomendasikan memasukkan alias di sana atau di.bash_aliases
.