zsh - perluas sepenuhnya jalur biner di <tab>

10

Dalam perilaku zsh saya saat ini, menekan tab setelah mengetik "sudo" hanya menambah spasi.

$ sudo ...

Yang benar-benar saya inginkan adalah tab untuk memperluas sepenuhnya ke jalur biner yang akan dieksekusi ketika saya menekan tab, memungkinkan saya untuk melihat apa yang akan dijalankan:

$ /usr/bin/sudo ...

Tujuannya adalah untuk melindungi terhadap kasus di mana pengguna lokal di komputer saya diretas, entri ditambahkan ke $PATHvariabel saya , dan 'sudo' menjalankan program jahat, yang akan menjadi eskalasi yang mudah untuk di-root.

Ali
sumber
Ada solusi lain yang tidak melibatkan tab rebinding. Tambahkan nama perintah dengan =dan tekan tab setelah perintah, dan itu akan memperluas nama perintah ke jalur penuh.
Mischa Arefiev

Jawaban:

7

Gunakan bindkeyperintah builtin untuk mengikat kunci ke perintah Zsh, seperti ini:

bindkey "^I" expand-cmd-path 

dimana "^I"Tab. Anda bisa memasukkan baris ini ke ~/.zshrcfile Anda . Peringatan: ini akan memecah pelengkapan argumen secara otomatis.

Mischa Arefiev
sumber
Bersulang! Jelas ini bukan solusi ideal jadi saya mengikatnya ke Ctrl-O sebagai gantinya. Namun tidak ada banyak binari yang mengambil input kata sandi (sudo, ssh, gpg, ...), jadi saya senang hanya menekan Ctrl-O setiap kali saya menggunakan salah satu dari mereka. Saya juga harus menunjukkan bahwa ini tidak menyelesaikan seluruh masalah karena siapa pun yang memiliki akses ke akun saya dapat menumbangkannya melalui .zshrc atau xmonad.hs, tetapi dapatkan saya beberapa jalan ke sana!
Ali