Bagaimana saya bisa menemukan deklarasi alias nakal?

37

Saya mencoba menemukan di mana spesifik aliastelah dinyatakan. Saya telah mencari semua tempat yang biasa saya tahu untuk mencari alias:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / profile

Tanpa keberuntungan.

Saya tahu itu aliaskarena ketika saya melakukannya which COMMAND, saya mendapatkan:

alias COMMAND='/path/to/command'
    /path/to/command

Apakah ada cara untuk menemukan file yang menyatakan aliashanya mengetahui aliasnama?

utopiabound
sumber
3
Sebuah pertanyaan yang terkait tentang variabel lingkungan bukan alias. Pada dasarnya, tidak ada cara mudah karena alias bisa diatur di mana saja. Cobalah menempatkan set -xseperti yang disarankan di bagian atas Anda dan lihat apakah itu mempersempitnya untuk Anda.
jw013
1
Anda harus meletakkannya set -xdi atas /etc/bash_profileatau /etc/bashrc. Mengapa tidak hanya menjalankan bash -i -xatau bash -l -x?
Mikel

Jawaban:

30

Saya akan mencari /etc/profile.d/kesalahannyaalias .

Anda juga dapat melakukan yang berikut untuk menemukannya:

grep -r '^alias COMMAND' /etc

Ini akan secara rekursif grepmelalui file mencari baris yang dimulai dengan alias COMMAND.

Jika semuanya gagal, letakkan ini di akhir Anda ~/.bashrc

unalias COMMAND
utopiabound
sumber
26

Ada beberapa hal yang dapat Anda coba:

  1. gunakan bash -vuntuk melihat baris apa yang sedang dibaca saat startup shell
  2. gunakan bash -xuntuk melihat perintah apa yang sedang dijalankan saat startup shell
  3. jalankan hanya dengan satu file startup

bash -v

The -v pilihan membuat bashmencetak setiap baris dari setiap file script itu berbunyi seperti membaca itu.

Mulailah dengan berlari

bash -i -v >bash-i.out 2>&1

tunggu 5-10 detik, lalu tekan Ctrl+C.

Ini akan memberi Anda satu file yang disebut bash-i.out itu seperti semua file startup Anda digabung (atau digabung) bersama-sama.

Kemudian gunakan lessuntuk membuka file dan mencari alias menggunakan /aliasname.

Sekarang, bandingkan di mana alias itu muncul dalam kaitannya dengan baris lain dalam file. Misalnya, pada sebagian besar sistem, /etc/bash.bashrcada komentar di bagian atas yang mengatakan /etc/bash.bashrcdan ~/.bashrcada juga.

Jika itu di atas bagian atas Anda ~/.bashrc, maka itu mungkin file startup di /etcyang mendefinisikan alias, jika tidak di dalam Anda ~/.bashrcatau file itu termasuk melalui sourceatau .(perintah dot).

Jika itu tidak menunjukkan alias, coba

bash -l -v >bash-l.out 2>&1

Itu memberitahu bash menjadi shell login, yang membaca beberapa file startup yang berbeda, misalnya /etc/profiledan ~/.bash_profilebukannya /etc/bash.bashrcdan ~/.bashrc.

bash -x

Jika bash -vtidak memberikan jawaban yang pasti, coba jalankan bash -x, yang mencetak perintah yang dijalankan shell, daripada baris yang dibaca shell Anda.

Metode ini pada dasarnya sama dengan yang di atas kecuali berubah -vmenjadi -x. (Anda dapat menggunakan keduanya bersama-sama jika perlu.)

Jalankan hanya dengan satu file startup

bash -i --rcfile="$HOME/.bashrc"

dan lihat apakah Anda memiliki alias.

Coba hal yang sama dengan rcfileset ke /etc/bash.bashrcapakah sistem Anda memilikinya.

Lalu coba

bash -l --rcfile="$HOME/.bash_profile"

dan lakukan hal yang sama dengan setiap file startup bash yang memiliki profilenamanya, mis. ubah $HOME/.bash_profileke /etc/profile.

Cara apa pun yang membuat alias muncul memberi tahu Anda file yang harus Anda mulai lihat.

Mikel
sumber
2

Mungkin Anda .xinitrc? Anda juga harus memeriksa untuk melihat apakah Anda .bashrcatau .bash_profilesumber file lain di dalamnya. Sebagai contoh, saya menyimpan semua alias saya di file terpisah yang dirujuk oleh perintah ini:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Beberapa pertanyaan yang mungkin juga membantu: Apakah ini untuk pengguna biasa atau root? Perintah apa itu? Apa rasa Linux?

SigueSigueBen
sumber
0

Saya mengikuti praktik yang sangat umum untuk memasukkan definisi alias saya

~/.bash_aliases

dan kemudian memanggilnya dari .bashrc dengan

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
Michael Durrant
sumber
dapatkah saya menebak maksud Anda .bash_aliases di perintah kedua alih-alih .bash_alias?
stagl