Saya tidak mengerti mengapa penyelesaian bash dimuat sangat lambat di MacBook Pro saya.
Saya melakukan yang berikut ini di ~/.bash_profile
:
echo "Loading BashCompletion..."
if [ -f /opt/local/etc/bash_completion ]; then
. /opt/local/etc/bash_completion
fi
echo "BashCompletion loaded."
waktu eksekusi untuk bash_completion biasanya> 2 detik.
Saya merasa sangat menjengkelkan ketika saya bekerja di terminal yang mengharuskan saya untuk terus membuka tab baru.
Apakah ada cara saya bisa men-cache ini atau sesuatu?
(Catatan Saya menggunakan iTerm2 dan ini sama lambatnya pada terminal asli di Mac juga).
Jawaban:
Versi singkat: Menghapus satu baris dari
/usr/local/etc/bash_completion
mengurangi waktu untuk membuka tab baru dari sepuluh detik menjadi seperempat detik. Baca terus untuk detailnya.Saya menggunakan bash-completion dari homebrew dan mengalami masalah yang sama. Butuh lebih dari sepuluh detik untuk memuat skrip penyelesaian bash setiap kali saya membuka terminal.
Sebagian besar waktu itu, tampaknya diambil oleh satu baris dalam
have()
fungsi: panggilantype
untuk menentukan apakah program baris perintah diinstal.Dengan
have()
fungsi default dan semua skrip penyelesaian bash yang disediakan, diperlukan 10,561 untuk memuat skrip (dilaporkan dengan awalantime
ke. /opt/local/etc/bash_completion
baris dalam.bash_profile
file saya .Setelah mengomentari
PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbin type $1 &>/dev/null &&
baris/usr/local/etc/bash_completion
skrip saya (meninggalkanhave=yes
baris, membuka terminal baru hanya membutuhkan 0,258s. Kali ini dapat dikurangi lebih jauh dengan menghapus skrip penyelesaian yang tidak perlu (symlink) dari/usr/local/etc/bash_completion.d
direktori.Saya tidak tahu mengapa panggilan
type
begitu lama. Saya sedang menyelidiki itu selanjutnya.Salah satu kelemahan potensial dari pendekatan ini adalah bahwa hal itu akan menyebabkan fungsi penyelesaian bash dimuat ke memori walaupun Anda tidak menggunakannya. The
have()
pemeriksaan fungsi untuk melihat apakah perintah atau aplikasi diinstal. Jika tidak, skrip penyelesaian umumnya memutuskan untuk tidak repot memuatnya sendiri karena tidak akan berguna.Saat ini, saya senang dengan tradeoff tetapi saya akan terus mengeksplorasi
type
masalah saat saya punya waktu. Saya akan memperbarui jawaban saya jika saya menemukan solusi yang lebih baik.sumber
Bagi siapa saja yang datang ke kesimpulan bahwa kali startup untuk kerang baru pada MacOS terlalu lambat bagi mereka, ini adalah yang solusi .
Saya baru saja menemukan bahwa sebenarnya ada dua paket yang dapat diinstal melalui
brew
. Saya telah menginstalbash-completion
paket selama bertahun-tahun, dan tidak pernah repot-repot mempertanyakannya, meskipun pada waktu itu saya telah beralih dari Bash 3 ke 4, menjadi sekarang 5. Namun, dari waktu ke waktu, saya akan meninjau kembali masalahnya , sering menemukan diskusi StackOverflow yang sangat ini.Ada paket lain,
bash-completion@2
!Apa bedanya?
bash-completion
adalah untuk Bash versi 3.2.bash-completion@2
untuk Bash versi 4.1+, dan 5.Dalam menghapus
bash-completion
paket lama , dan menginstalbash-completion@2
, waktu startup shell saya telah turun dari 605ms ke 244ms. Itu peningkatan kecepatan besar.Saya menduga banyak dari kita membuat kesalahan yang sama, karena
brew info
statistik menunjukkan bahwa yang pertama memiliki banyak pemasangan, sedangkan yang kedua memiliki sangat sedikit:Perlu dicatat bahwa jawaban yang dipilih saat ini menyebutkan komentar beberapa baris, yang hanya memberikan sedikit peningkatan pada waktu startup (jika menggunakan
bash-completion
paket lama , yang mungkin banyak), tetapi tidak memiliki dampak apa pun padabash-completion@2
paket baru : paket baru ini cepat apa pun yang terjadi. Itu berarti tidak diperlukan peretasan.TL; DR:
Ingatlah untuk memperbarui jalur sumber ke file penyelesaian di
.bashrc
atau.bash_profile
file Anda.Sumber:
Sebagai topik yang agak terkait, saya banyak menggunakan
rclone
utilitas, jadi sudah diinstal. Itu juga kebetulan memiliki file penyelesaian terbesar yang pernah saya lihat . Menghapusnya mengurangi waktu startup shell saya ke ~ 120ms, yang sangat cepat.Edit:
Bagi siapa saja yang menginginkan detail teknis yang menjelaskan masalah ini, saya telah menulisnya secara panjang lebar di forum Homebrew . Untuk meringkas, alasan yang
bash-completion@2
jauh lebih cepat adalah karena itu ditulis sehingga tidak lagi bersemangat memuat semua file penyelesaian; alih-alih ia memuat file penyelesaian sesuai permintaan, atau seperti yang dijelaskan penulis, ia memuatnya dengan cara yang tidak bersemangat .sumber
version 3.2.57(1)-release (x86_64-apple-darwin18)
. Terima kasih telah menunjukkannya; Saya telah menghapus garis dari posting saya.Dengan gagasan yang diberikan godbyk kepada saya, saya menemukan bahwa variabel PATH saya memiliki beberapa direktori yang tidak memiliki binari atau tidak ada, menghapusnya mempercepat secara signifikan. Dengan kata lain, ini adalah PATH yang saya miliki di bashrc saya:
Dan kemudian saya mengubahnya menjadi:
Ini karena
have
fungsi dalam penyelesaian bash itu, mencari setiap perintah, dan aku punya terlalu banyak direktori tidak berguna yang akan dikunjungi untuk masing-masing binari itu, menghapusnya mempercepatnya.sumber
Saya memiliki masalah yang sama. Beberapa trik debugging sederhana membawa saya ke akar penyebabnya.
Pertama, aktifkan
DEBUG mode
sehingga Anda dapat melihat apa yang terjadi:Ini memungkinkan pencetakan verbose ke konsol, sehingga Anda dapat melihat perintah terakhir. Anda sekarang dapat menjalankan skrip di latar belakang dan Anda akan melihat apa yang terjadi
Ambil bukan dari
PID
, yang dapat Anda telusuri denganps
ataupstree
:pstree -p <the PID>
:Seperti yang Anda lihat, itu memulai beberapa perintah terkait karat, yang memakan waktu lama.
Menghapus sementara
/opt/boxen/homebrew/etc/bash_completion.d/cargo
gejala saya teratasi.sumber
Jika Anda menjalankan MacPorts> = 2.1.2 dan Mountain Lion sepertinya Anda
bash_profile
salah. Ikuti instruksi pada Bagaimana mendapatkan git-completion.bash untuk bekerja pada Mac OS X? . Saya berasumsi bahwa bisa mempercepat penyelesaian otomatis.Solusi lain adalah mencoba menginstal lengkapi-otomatis melalui Fink atau Homebrew. Jika itu tidak berhasil, Anda dapat mencoba shell lain sama sekali. Saya telah menemukan bahwa kulit Ikan luar biasa dalam hal pelengkapan otomatis (di luar kotak). Meskipun versi 2 masih dalam versi beta, saya akan sangat merekomendasikannya.
sumber
Saya akan menebak bahwa bash Anda terlalu tua. Saya menjalankan stock bash yang datang dengan Mountain Lion dan inilah yang saya lihat:
sumber