Bagaimana cara melihat perintah yang dilampirkan pada alias bash?

324

Misalkan saya memiliki alias di bash shell. Apakah ada perintah sederhana untuk mencetak perintah apa yang akan dijalankan alias?

Casebash
sumber

Jawaban:

431

The typebuiltin berguna untuk ini. Ini tidak hanya akan memberi tahu Anda tentang alias, tetapi juga fungsi, bawaan, kata kunci, dan perintah eksternal.

$ type ls
ls is aliased to `ls --color=auto'
$ type rm
rm is /bin/rm
$ type cd
cd is a shell builtin
$ type psgrep
psgrep is a function
psgrep () 
{ 
    ps -ef | { 
        read -r;
        printf '%s\n' "$REPLY";
        grep --color=auto "$@"
    }
}

type -a cmdakan menampilkan semua perintah dengan nama itu dalam urutan prioritas, yang berguna untuk lsalias di atas, tempat alias itu sendiri memanggil ls.

$ type -a ls
ls is aliased to `ls --color=auto'
ls is /bin/ls

Ini memberitahu Anda bahwa ketika Anda menjalankan ls, /bin/lsakan digunakan, dan --color=autoakan dimasukkan dalam daftar argumennya, di samping yang lain yang Anda tambahkan sendiri.

geirha
sumber
apa yang harus dilakukan ketika alias mengandung LEBIH BANYAK alias?
user251046
2
@ user251046 tetap menggunakan typesampai Anda menekan sesuatu selain alias ...
geirha
Saya suka jawaban ini karena typeakan menguraikan / menafsirkan setiap kutipan, sehingga Anda dapat memastikan kutipan itu benar.
wisbucky
Saya dapat ls is aliased to 'ls --color=auto', tetapi bagaimana saya bisa mendapatkan satu lapisan lebih dalam, untuk melihat apakah ia menggunakan / bin / ls atau / usr / local / bin / ls atau apa?
Krubo
1
@krubo type -a lsakan menampilkan semua perintah ls yang ditemukan dalam urutan pilihan. Apapun yang tepat di bawah alias adalah yang akan dieksekusi oleh alias.
geirha
163

Cukup ketik aliassaat di prompt Shell. Seharusnya menampilkan daftar semua alias yang saat ini aktif.

Atau, Anda bisa mengetik alias [command]untuk melihat alias alias spesifik apa, sebagai contoh, jika Anda ingin mencari tahu lsalias alias itu, Anda bisa melakukannya alias ls.

Thomas Ward
sumber
12
Atau ketik alias lsuntuk mencari tahu apa yang secara khusus lsalias.
poolie
2
@poolie Memang. Saya pikir pertanyaannya adalah untuk melihat semua alias, itulah sebabnya saya tidak menjelaskan lebih lanjut tentang perintah alias.
Thomas Ward
sementara ini berfungsi untuk alias, itu tidak berfungsi jika Anda telah mendefinisikan fungsi shell khusus. typeNamun, berfungsi dalam kedua kasus.
Sujay Phadke
53

Saya sangat suka Ctrl+ Alt+ Eketika saya belajar dari jawaban ini . Ini "memperluas" baris perintah yang saat ini diketik, artinya melakukan ekspansi alias (antara lain).

Apa artinya? Ternyata alias apa pun, yang saat ini mungkin ditulis pada baris perintah, menjadi singkatan dari apa itu.

Misalnya, jika saya mengetik:

$ ls

dan kemudian tekan Ctrl+ Alt+ E, itu berubah menjadi

$ ls --time-style=locale --color=auto
Der Hochstapler
sumber
punya ini setara di distro lain?
sepehr
@sepehr Bekerja pada Debian, saya menganggap itu fitur bash dan harus bekerja pada distribusi apa pun.
Der Hochstapler
4
Anda benar, ini bekerja pada bash tapi saya punya zsh dan sayangnya tidak berhasil.
sepehr
sangat membantu. Saya memiliki tujuan yang berbeda untuk memperluas salah satu dari perintah bash sebelumnya yang tercatat dalam sejarah dengan, yaitu, 394, sehingga saya dapat mengeditnya terlebih dahulu sebelum mengeksekusi
XXL
1
Ini memiliki satu peringatan. Ketika alias menyertakan kutipan yang diperlukan, mereka akan dihapus. Jadi, saya squeue -u davidmh -o %.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R bukannyasqueue -u davidmh -o "%.18i %.9P %.25j %.8u %.8T %.10M %.9l %.6D %R "
Davidmh
10

Sebenarnya jawaban yang benar adalah menggunakan array BASH_ALIASES, misalnya:

$ echo ${BASH_ALIASES[ls]}
ls -F --color=auto --show-control-chars
noonex
sumber
2
Saya menemukan ini berguna dalam situasi di mana saya ingin akses terprogram ke pernyataan aktual yang alias tanpa hal-hal yang berguna manusia di sekitarnya.
M. Justin
ini tidak berfungsi di zsh
ProGrammar
1
@ProGrammar pertanyaannya adalah tentang bash - untuk zsh Anda harus melihat pertanyaan tentang zsh
noonex
1
Bingo. Persis apa yang saya butuhkan, sama seperti @ M.Justin - Saya ingin menumpuk lebih banyak switch ke lsalias saat ini tanpa mengubah apa yang ada di sana. Jadi saya akan alias ls="${BASH_ALIASES[ls]} --time-style=iso"menangani kasus saya.
Kaya
2

Anda bisa menggunakan whichperintah.

Jika Anda menetapkan alias untuk lssebagai ls -aldan kemudian mengetik which ls, Anda akan melihat:

ls: aliased to ls -al.

pengguna312471
sumber
bash tidak memiliki whichperintah.
geirha
Tidak bekerja untuk saya ..
Chiel ten Brinke
2
whichadalah cara yang buruk untuk mencari alias seperti yang dijelaskan di sini: unix.stackexchange.com/questions/10525/… Bahkan tidak berfungsi bagi saya untuk alias di bash di Ubuntu.
Sujay Phadke