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?

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.


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.


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

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

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.