Debian - apt (not apt-get) pelengkapan otomatis tidak berfungsi

19

Saya di Debian Jessie 8.6. Saya perhatikan bahwa apt-getmendapatkan pelengkapan otomatis bash yang diharapkan saat menekan tab untuk paket dan perintah, tetapi ketika mencoba menggunakannya dengan aptitu tidak berfungsi. Saya ingat menggunakan xubuntu 16.04 di mana ia bekerja, jadi saya merasa aneh bahwa itu tidak berfungsi di sini. Apakah ada cara untuk mengaktifkannya untuk perintah aptjuga? Jika ya, bagaimana caranya?

Andrea
sumber
Apa ada yang berhasil untukmu?
Lynob
@Lynob Saya akhirnya pindah ke Ubuntu, jadi saya tidak dapat membantu Anda, maaf.
Andrea

Jawaban:

19

Debian tidak datang dengan 'selesai bash' diinstal dan diaktifkan.

Untuk memperbaikinya, jalankan (sebagai root):

apt-get install bash-completion

Kemudian, Anda memiliki dua opsi. Anda dapat (1) mengaktifkannya atas dasar per pengguna untuk Anda sendiri, atau (2) mengaktifkannya secara global.

  1. Jika Anda ingin mengaktifkannya hanya untuk pengguna Anda, edit ~/.bashrc- tambahkan berikut ini:

    if [ -f /etc/bash_completion ]; then
        . /etc/bash_completion
    fi
    

    Untuk mencobanya tanpa keluar dan masuk kembali, jalankan:

    . ~/.bashrc
    

    Atau buka shell baru. Kemudian coba gunakan tab-completion dengan apt. Titik dan spasi di awal ( .) sama dengan menggunakan sourcekata kunci di bash, tetapi lebih portabel.

    Jika Anda ingin berfungsi saat sumasuk ke akun root, lakukan hal yang sama di direktori home root (biasanya /root).

  2. Untuk mengaktifkannya secara global, lakukan perubahan dari (1) di file /etc/bash.bashrcsebagai gantinya.

Untuk siapa pun yang bertanya-tanya mengapa karya ini, .di depan /etc/bash_completiontidak tidak mengacu pada direktori saat ini, karena memiliki ruang di sekitarnya. Ini malah membuat konten file yang diberikan dievaluasi dalam shell yang sedang berjalan, bukannya dieksekusi dalam subkulit baru. Itu standar di sini.

Di Bash, ini .bisa diganti dengan perintah source, tapi ini tidak distandarisasi oleh POSIX dan kurang portabel sehingga saya cenderung menjauhkan orang dari menggunakannya. Dalam hal ini, karena ini adalah program khusus untuk memperluas bash, daripada sesuatu yang perlu bekerja dalam shell bourne atau ksh, Anda dapat merasa bebas untuk menggantikan sourceketerbacaan.

Wyatt8740
sumber
1
Saya sudah melakukan langkah-langkah ini, tetapi itu tidak membantu. Hanya bekerja dengan apt-get, tetapi apt tidak.
Andrea
@ Andrea Oh, maaf, saya tidak sepenuhnya membaca pertanyaan Anda, saya kira. Saya tidak berada di kotak Debian saya saat ini (di windows, semua yang saya dapatkan adalah cygwin, sayangnya), tetapi saya akan mencoba mencari tahu dari mesin debian saya ketika saya kembali ke rumah.
Wyatt8740
4

Dalam Debian 9 Stretch cukup edit /etc/bash.bashrc dan batalkan komentar:

# enable bash completion in interactive shells
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
4pie0
sumber
3

Salin file konfigurasi ini dari Ubuntu: / usr / share / bash-completion / completion / apt ke direktori yang sama di Jessie. Anda juga bisa mendapatkan file di sini: http://pastebin.com/PRBMt3an

minaev
sumber
Ini yang saya butuhkan. Tetapi penyelesaian otomatis tidak berfungsi untuk apt, setelah saya salin, mengganti nama file apt yang diunduh ke / usr / share / bash-completion / completions /. Cara membuatnya bekerja?
klor
File pastebin.com/PRBMt3an ada di Windows CR LF linefeed, ini sebabnya tidak bekerja. Saya harus mengkonversi format baris ke Unfeed LF linefeed, jadi kemudian bekerja setelah memulai terminal baru.
klor
Berikut adalah file 'apt' dengan linefeed yang benar: file yang diajukan
klor
1

Bagaimana saya menyelesaikannya

Aku punya masalah penyelesaian otomatis mencoba untuk melengkapi otomatis wgetdengan apt-get install wg[TAB][TAB]dan saya berhasil menyelesaikannya dengan menghapus --no-generateparameter dari lalat di bawah ini:

/usr/share/bash-completion/completions/apt-cache
/usr/share/bash-completion/completions/apt-get

Perlu disebutkan bahwa file-file ini tersedia hanya setelah Anda menginstal bash-completion.

The --no-generateparameter saya maksudkan dapat dilihat pada baris di bawah, tapi saya dihapus semua --no-generate, tidak hanya dari baris ini: https://github.com/scop/bash-completion/blob/master/completions/apt-get# L28

Bagaimana saya sampai pada titik ini?

Aku sampai ke titik ini setelah menjalankan set -vsebelumnya apt-get install wg[TAB][TAB], yang menunjukkan bahwa perintah dieksekusi adalah:

apt-cache --no-generate pkgnames wg

dan hasilnya adalah kesalahan:

E: Could not open file  - open (2: No such file or directory)

Ketika saya dieksekusi apt-cache pkgnames wgtanpa --no-generateSaya dengan benar mendapat daftar untuk pelengkapan otomatis:

root@484f5c8f56ba:/# apt-cache pkgnames wg
wgalician-minimos
wget2
wgaelic
wget
wgerman-medical
wget2-dev

Semoga ini membantu.

Ruben Alves
sumber
Itulah tepatnya yang saya butuhkan. Terima kasih: D
Ceisc