Selesaikan bash untuk perintah di Mac OS X

38

Bagaimana cara saya mendapatkan finkdan macportsuntuk melengkapi nama program saat mengetik perintah, seperti pada Ubuntu apt-get?

Misalnya saat saya mengetik

sudo port install ca

dan tekan tab, saya ingin terminal untuk melengkapi otomatis atau menunjukkan kepada saya perintah yang tersedia.

OS X bahkan tidak menyelesaikan perintah secara otomatis setelah sudo!

Osama Gamal
sumber

Jawaban:

69

bash-completion menambah penyelesaian untuk:

  • Nama perintah setelah sudodanwhich
  • Nama paket Macports dan Homebrew (opsional)
  • Nama host di known_hostsuntuk perintah sepertissh
  • Folder aktif CDPATH

Dan seterusnya. Anda dapat mencetak daftar perintah penyelesaian dengan complete -pdan melihat sumber fungsi dengan declare -f.

Menginstal Homebrew atau MacPorts dan Bash

Pertama, Anda harus menginstal Homebrew atau MacPorts sesuai dengan instruksi. Catatan: Jangan menginstal keduanya, karena keduanya saling bertentangan.

Kemudian, instal versi Bash yang lebih baru. Bash bawaan di OS X agak tua, dan Anda akan mendapatkan lebih banyak opsi penyelesaian dengan Bash> 4.1, yang bisa Anda lewati

brew install bash

atau

sudo port install bash

tergantung pada apakah Anda menggunakan Homebrew atau MacPorts.

Menginstal bash-completion dengan Homebrew

Untuk menginstal bash-completion, Anda harus:

brew install bash-completion

Dan tambahkan yang berikut ke Anda ~/.bash_profile:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
  . $(brew --prefix)/etc/bash_completion
fi

Homebrew saat ini menginstal versi bash-completion (1.3) yang lebih lama yang masih berfungsi dengan Bash 3.x, tetapi tetap saja, menggunakan Bash 4.x direkomendasikan.

Menginstal bash-completion dengan MacPorts

Dengan MacPort:

sudo port install bash-completion

Kemudian, tambahkan ke ~/.bash_profile:

if [ -f /opt/local/etc/profile.d/bash_completion.sh ]; then
  . /opt/local/etc/profile.d/bash_completion.sh
fi

Lihat trac.macports.org/wiki/howto/bash-completion untuk instruksi tentang cara mengaktifkan penyelesaian untuk nama port.

slhck
sumber
bash-completionPaket MacPorts menyediakan dukungan untuk penyelesaian nama paket sebagai argumen tambahan setelahnya port <verb>. Lihat di sini , baris 48-58. Perilaku ini diisyaratkan di wiki MacPorts , yang menyatakan: " Ini bukan hanya untuk file dan direktori, tetapi juga misalnya untuk perintah port. Jadi Anda mengetik port <Tab>dan mendapatkan daftar semua perintah yang mungkin. ", Meskipun hanya secara eksplisit menyebutkan penyelesaian kata kerja (yang jauh lebih sederhana).
Daniel Beck
Nama - nama paket dilengkapi secara otomatis, wiki tidak menyebutkannya. Lihat kode skrip yang ditautkan.
Daniel Beck
Ini variants.confbukan untuk penyelesaian untuk MacPort sendiri; variants.conf mendefinisikan varian yang secara otomatis diatur untuk semua port, seperti yang dijelaskan pada halaman wiki yang Anda tautkan. Menambahkan garis itu menyebabkan dukungan penyelesaian bash diaktifkan jika memungkinkan untuk port yang Anda instal.
Kevin Reid
Terima kasih atas tip tentang pelengkapan otomatis dalam homebrew. Itu saja yang mendapatkan jawaban ini sebagai pemungutan suara.
Paul Wagland
Luar biasa, ini dilengkapi makeautocomplete, persis seperti yang saya inginkan.
Мати Тернер