Alias, seperti ll
didefinisikan dengan alias
perintah.
Saya dapat memeriksa perintah dengan hal-hal seperti type ll
yang dicetak
ll is aliased to `ls -l --color=auto'
atau command -v ll
yang dicetak
alias ll='ls -l --color=auto'
atau alias ll
yang juga dicetak
alias ll='ls -l --color=auto'
tapi sepertinya saya tidak dapat menemukan di mana alias didefinisikan, yaitu file seperti .bashrc
, atau mungkin secara manual di shell yang sedang berjalan. Pada titik ini saya tidak yakin apakah ini mungkin.
Haruskah saya cukup memeriksa semua file yang dimuat bash
dan memeriksa semuanya?
bash -xl
Jawaban:
Definisi manual akan sulit dikenali (log riwayat, mungkin) meskipun meminta shell untuk menunjukkan apa yang dilakukannya dan kemudian
grep
akan membantu menemukan yang ditetapkan dalam file rc:Jika shell tidak secara tepat menangkap opsi yang diperlukan dengan salah satu doa di atas (yang secara interaktif menjalankan perintah nol), maka
script
:Pilihan lain adalah menggunakan sesuatu seperti
strace
atausysdig
untuk menemukan semua file yang disentuh shell, lalu bukagrep
secara manual (berguna jika shell atau program tidak memiliki-x
flag); file RC standar tidak cukup untuk pemeriksaan nama file manual jika sesuatu seperti oh-my-zsh atau konfigurasi khusus situs menarik kode dari siapa yang tahu di mana (atau mungkin juga ada variabel lingkungan, seperti yang ditunjukkan sorontar dalam jawaban mereka) .sumber
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Di sinilah saya menemukan
grep -rl
sangat berguna:akan memberi tahu Anda di file mana kata
alias
itu digunakan.Mungkin masuk
~/.bashrc
dan pasti~/.bash_aliases
kalau itu ada.Namun tidak mungkin untuk benar-benar yakin bahwa itu mencakup semua opsi. File-file itu juga dapat memanggil atau memuat file lain. Variabel lingkungan seperti ENV atau
$BASH_ENV
mungkin mengarahkan bash untuk memuat beberapa file lainnya.Dan alias bahkan dapat didefinisikan dengan menetapkan variabel (penekanan milik saya):
sumber
grep -rl alias ~/.bash*
mungkin salah mencocokkan file riwayat, tetapi +1 untuk menunjukkan array BASH_ALIASES!Saya tidak tahu cara untuk benar-benar daftar sumber alias Anda, tetapi karena sepertinya Anda menggunakan bash, saya pikir ini adalah file sumber yang mungkin:
Anda harus dapat memahami yang menemukan alias, mis
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.sumber
bash -x
, seperti yang Anda sebutkan. Saya pikir di atas cukup mudah untuk dijalankan dengan cepat dan jika tidak menemukan alias Anda dapat membaca langkah-langkah eksekusi.Menggabungkan jawaban thrig ini dengan @ saran MarkPlotnick ini , Anda dapat menguji apakah
BASH_ALIASES[ll]
diatur untuk mempersempit bawah. TheBASH_SOURCE
array danLINENO
variabel sangat berguna di sini. Sayangnya, pemeriksaan apakahBASH_ALIASES[ll]
disetel hanya akan berhasil setelah alias telah ditetapkan, dan sehingga baris tersebut bisa berada di file lain sama sekali.Memberikan output seperti:
Anda bahkan dapat menghentikan shell menggunakan cek ini:
sumber
Saya sudah cukup sukses menggunakan
which
.sumber
which
dapat menangani alias di tcsh (dan mungkin csh sebelumnya) dan zsh di mana itu adalah builtin, dan di bash menggunakan profil default pada RedHat-family yang memiliki kludge untuk menjalankan program GNU (eksternal) tetapi memberi makan data alias shell, jika tidak tidak . Lebih penting itu hanya memberitahu apa alias diatur, bukan di mana itu diatur, yang merupakan Q di sini.Periksa ~ /. Profil jika tidak ada di ~ / .bashrc
sumber
Saya akhirnya menemukan
ll
definisi alias untuk server web kami (CentOS) di dua skrip shell di/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Aku menemukannya dengan pertama kali belajar dari komentar di atas di mana profil seluruh sistem adalah:
/etc/profile
. File itu menyatakan bahwa alias seluruh sistem didefinisikan/etc/bashrc
, dan dalam file itu saya melihat bahwa itu loop melalui beberapa skrip shell/etc/profile.d/
, dan jadi saya gunakangrep
dalam direktori itu dan akhirnya menemukan definisi. Saya juga menemukan adal.
alias yang mencantumkan semua file dot:Dari
colorls.sh
:(Ada alias yang setara di
colorls.csh
.)sumber
Pertama gunakan perintah berikut
Daftar semua fungsi
Daftar semua alias
Jika Anda tidak menemukan alias atau fungsi, pertimbangkan metode pencarian yang lebih agresif
Versi bash
Versi zsh
Penjelasan Singkat tentang Opsi
sumber