GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Cara Menggunakan `yang` Pada Perintah Aliased?

Seperti kebanyakan pengguna, saya memiliki banyak alias yang diatur untuk memberikan satu set flag default untuk program yang sering digunakan. Misalnya,

alias vim='vim -X'
alias grep='grep -E'
alias ls='ls -G'

Masalahnya adalah jika saya ingin menggunakan which untuk melihat di mana vim saya /grep /ls /etc berasal, alias menghalangi:

$ which vim
vim: aliased to vim -X

Ini adalah hasil yang berguna, tetapi bukan yang saya cari dalam kasus ini; Saya tahu vim alias ke vim -X tapi saya ingin tahu di mana itu vim berasal dari.

Singkat untuk sementara tidak mendefinisikan alias supaya saya bisa menggunakan which di atasnya, apakah ada cara mudah untuk memiliki which 'membuka' alias dan menjalankannya sendiri?

Sunting: Tampaknya which adalah shell-builtin dengan perilaku yang berbeda di shell yang berbeda. Di Bash, saran SiegeX tentang --skip-alias pekerjaan bendera; namun, saya menggunakan Zsh. Apakah ada yang serupa di sana?

Jawaban yang Diterima:

which sebenarnya adalah cara yang buruk untuk melakukan hal-hal seperti ini, karena membuat tebakan tentang lingkungan Anda berdasarkan $SHELL dan file startup (dipikirkannya) yang digunakan shell; tidak hanya terkadang salah menebak, tetapi Anda biasanya tidak dapat menyuruhnya berperilaku berbeda. (which di Ubuntu 10.10 saya tidak mengerti --skip-alias seperti yang disebutkan oleh @SiegeX, misalnya.) type menggunakan lingkungan shell saat ini alih-alih menyodok file konfigurasi Anda, dan dapat diperintahkan untuk mengabaikan bagian dari lingkungan itu, sehingga ini menunjukkan kepada Anda apa yang sebenarnya akan terjadi daripada apa yang akan terjadi dalam rekonstruksi shell default Anda.

Dalam hal ini, type -P akan mengabaikan alias atau fungsi apa pun:

$ type -P vim
/usr/bin/vim

Anda juga dapat memintanya untuk mengupas semua lapisan, satu per satu, dan menunjukkan kepada Anda apa yang akan ditemukan:

$ type -a vim
vim is aliased to `vim -X'
vim is /usr/bin/vim

(Memperluas ini dari komentar :)

Masalah dengan which adalah bahwa itu biasanya program eksternal, bukan shell built-in, yang berarti tidak dapat melihat alias atau fungsi Anda dan harus mencoba untuk merekonstruksi mereka dari file startup/config shell. (Jika itu adalah shell built-in, seperti di zsh tapi ternyata bukan bash , lebih cenderung menggunakan lingkungan shell dan melakukan hal yang benar.)

type adalah perintah yang sesuai dengan POSIX yang diperlukan untuk berperilaku seolah-olah itu adalah built-in (yaitu, harus menggunakan lingkungan shell yang dipanggil termasuk alias dan fungsi lokal), jadi biasanya adalah bawaan.

Terkait:Perintah batch untuk menghapus file dari daftar file?

Biasanya tidak ditemukan di csh /tcsh , meskipun dalam sebagian besar versi modern dari which adalah shell builtin dan melakukan hal yang benar; terkadang bawaannya adalah what sebagai gantinya, dan terkadang tidak ada cara yang baik untuk melihat lingkungan shell saat ini dari csh /tcsh sama sekali.


Linux
  1. Cara menggunakan Perintah Su di Linux

  2. Bagaimana cara menggunakan perintah nama dasar?

  3. Cara Menggunakan Perintah Layar Linux

  1. Cara Menggunakan Telnet Di Windows

  2. cara menggunakan pylint di vim

  3. Bagaimana cara menambahkan perintah di editor vim?

  1. Cara Menggunakan Perintah Disown di Linux

  2. Cara Menggunakan Perintah SS Linux

  3. Cara Menggunakan Perintah Linux nohup