Mengapa pengaturan alias di .profile tidak berfungsi?

11

Saya memiliki ini sebagai baris terakhir di profil saya:

alias gl="cd /home/jrenner/glances/glances"

namun bahkan setelah reboot saya mendapatkan perintah tidak ditemukan saat mengetik gl. Apa yang terjadi? Saya masuk sebagai pengguna yang benar.

talloaktrees
sumber
Di mana Anda mengetik gl? Terminal? GUI?
Thomas Ward
1
Tidak ada yang pernah membahas aslinya mengapa? pertanyaan. Saya dapat mengonfirmasi bahwa alias yang didefinisikan dalam .profiletidak berfungsi dalam konteks apa pun yang saya coba: login konsol teks, terminal grafis, atau apa pun, meskipun variabel lingkungan dari file yang sama berfungsi.
Daniel Mahler
@DanielMahler, apakah Anda punya alasan mengapa?
Maged Saeed

Jawaban:

4

Saya cukup yakin bahwa ide lpanebr akan berhasil, tetapi inilah solusi yang lebih elegan. Lakukan perintah alias itu di .bashrc Begitulah cara saya melakukannya, atau beberapa orang lebih suka menambahkan file yang didedikasikan untuk alias. Sebut saja .aliasatau apa pun dan tambahkan .aliaske.bashrc

Seandainya saya bisa melakukan format seperti @ lpanelbr. Saya ingin tahu apakah ada wiki?

Jason
sumber
1
Sedangkan untuk memformat askubuntu menggunakan markdown. Silakan periksa askubuntu.com/editing-help untuk detailnya.
saji89
1
Mengapa .bashrcbekerja sementara .profiletidak? Juga, alasan apa pun mengapa Anda memilih untuk memberi nama file alias .alliasdaripada .alias?
Tom
# 1 Dari apa yang saya mengerti .bashrc khusus untuk bash dan .profile khusus untuk baris perintah non-bash. # 2 Saya tidak tahu maksud Anda. Lagipula aku bisa mengeja. (diedit)
Jason
7

Ada dua alasan terkait mengapa alias tidak selalu berfungsi saat dimasukkan ke dalam .profilefile. Yang pertama adalah bahwa file .profile(atau .bash_profile) hanya dijalankan untuk shell login. Jika Anda memulai bash di jendela terminal di bawah X, emulator terminal Anda (mis. Gnome-termanl) mungkin tidak menjalankan bash sebagai shell login. [Sebagian besar memiliki opsi untuk mengubah ini jika Anda mau, tetapi default (untuk gnome-termal tetap) tidak menjalankannya sebagai shell login.]
Shell akan menjadi shell interaktif dan karenanya .bashrcakan dijalankan.

Namun, biasanya bash telah dijalankan sebagai shell login kembali ketika sesi X sedang dimulai. Jadi jika ada perintah alias di dalamnya .profilemereka akan dieksekusi bersama dengan pengaturan variabel lingkungan seperti PATH dll. Ketika jendela terminal dibuka, contoh baru bash dijalankan untuk meminta, dan jalankan perintah di jendela terminal itu. Tidak seperti variabel lingkungan, alias tidak dapat diekspor dari satu instance bash ke yang baru yang dimulai olehnya. Jadi alias tidak diteruskan ke shell baru.

Untuk melihat ini, coba percobaan ini:

export ROBERT=bob
alias james=jimmy
echo $ROBERT
alias james
bash               #start a new bash instance
echo $ROBERT
alias james
exit               #end the new bash instance and revert to the original one
echo $ROBERT
alias james

Catatan yang .bashrctidak dijalankan oleh bash ketika dimulai sebagai shell login. Jadi menempatkan alias Anda di sana tidak akan selalu berhasil kecuali Anda .bashrcberasal dari Anda .profile, yang merupakan praktik yang sangat umum.

Tony McGregor
sumber
Diverifikasi: menambahkan source .bashrcdi .bash_profilediperbolehkan alias set di .bashrc bekerja.
Treefish Zhang
Sepertinya ini seharusnya jawaban yang benar. Juga, di Ubuntu cukup tambahkan alias Anda di ~/.bash_aliases. Itu cara yang tepat untuk melakukannya. (baca file .bashrc untuk detailnya).
Emilio M.
0

Jika Anda menggunakan bash ( echo $SHELL) sebagai interpreter shell, saya pikir itu yang terbaik (atau mungkin satu-satunya cara) jika Anda mendefinisikan fungsi CD Anda sendiri.

Edit .bashrcfile Anda dan tambahkan berikut ini di akhir:

# my custom functions:
function gl () {
   cd /home/jrenner/glances/glances/
}

Anda juga dapat memperluasnya seperti ini:

# my custom functions:
function cdw () {
   cd /home/jrenner/glances/glances/$1
   ls
}

dan ubah langsung ke sub direktori dan daftarkan isinya.

lpanebr
sumber
1
Itu mungkin saran yang bagus, tetapi itu bukan jawaban, karena itu tidak menjelaskan mengapa aliasarahan yang ditempatkan dalam .profilefile gagal.
Tom
0
$ bash #start a new bash instance

Ini masalah dengan server saya. Sederhana source .profiletidak berhasil karena suatu alasan

Mladen Janjetovic
sumber
0

Cara yang tepat untuk melakukan ini di Ubuntu adalah menambahkan alias ke ~/.bash_aliases. Buat file jika tidak ada.

File ini (jika ada) dipanggil dari default ~/.bashrc, dan alias akan tersedia di emulator terminal Anda juga.

Emilio M.
sumber