Tự động hoàn thành Debian - apt (không apt-get) không hoạt động


19

Tôi đang sử dụng Debian Jessie 8.6. Tôi nhận thấy rằng apt-getcó được tự động hoàn thành bash dự kiến ​​khi nhấn tab cho các gói và lệnh, nhưng khi cố gắng sử dụng nó với aptnó không hoạt động. Tôi nhớ sử dụng xubfox 16.04 nơi nó hoạt động, vì vậy tôi thấy lạ là nó không hoạt động ở đây. Có cách nào để kích hoạt nó cho lệnh aptkhông? Nếu vậy thì thế nào?


Đã làm gì cho bạn?
Lynob

@Lynob Cuối cùng tôi đã chuyển sang Ubuntu, vì vậy tôi không thể giúp bạn, xin lỗi.
Andrea

Câu trả lời:


19

Debian không đi kèm với 'bash-xong' được cài đặt và kích hoạt.

Để sửa lỗi này, hãy chạy (với quyền root):

apt-get install bash-completion

Sau đó, bạn có hai lựa chọn. Bạn có thể (1) kích hoạt nó trên cơ sở mỗi người dùng cho chính mình hoặc (2) kích hoạt nó trên toàn cầu.

  1. Nếu bạn muốn kích hoạt nó cho người dùng của mình, hãy chỉnh sửa ~/.bashrc- thêm vào như sau:

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

    Để dùng thử mà không cần đăng xuất và đăng nhập lại, hãy chạy:

    . ~/.bashrc
    

    Hoặc mở một vỏ mới. Sau đó thử sử dụng hoàn thành tab với apt. Dấu chấm và khoảng trắng ở đầu ( .) giống như sử dụng sourcetừ khóa trong bash, nhưng dễ mang theo hơn.

    Nếu bạn muốn nó hoạt động khi suvào tài khoản root, hãy làm điều tương tự trong thư mục gốc của root (thông thường /root).

  2. Để kích hoạt nó trên toàn cầu, thay vào đó hãy thực hiện các thay đổi từ (1) trong tệp /etc/bash.bashrc.

Đối với những ai đang tự hỏi tại sao các công trình này, .trước /etc/bash_completionkhông không đề cập đến thư mục hiện hành, vì nó có không gian xung quanh nó. Nó thay vào đó làm cho nội dung của tệp đã cho được đánh giá trong trình bao hiện đang chạy, thay vì được thực thi trong một lớp con mới. Nó được chuẩn hóa ở đây.

Trong Bash, điều này .có thể được thay thế bằng lệnh source, nhưng điều này không được chuẩn hóa bởi POSIX và ít di động hơn nên tôi có xu hướng điều khiển mọi người tránh sử dụng nó. Trong trường hợp này, vì nó đặc biệt là một chương trình để mở rộng bash, chứ không phải là thứ gì đó cần để hoạt động trong vỏ bourne hoặc ksh, bạn có thể thoải mái thay thế sourcecho khả năng đọc.


1
Tôi đã thực hiện các bước này, nhưng điều đó không giúp được gì. Chỉ hoạt động với apt-get, nhưng apt thì không.
Andrea

@Andrea Ồ, xin lỗi, tôi không đọc hết câu hỏi của bạn, tôi đoán vậy. Tôi không ở trong hộp Debian của tôi vào lúc này (trong các cửa sổ, tất cả những gì tôi có là Cygwin, thật không may), nhưng tôi sẽ cố gắng tìm ra nó từ máy debian của tôi khi tôi trở về nhà.
Wyatt8740

4

Trong Debian 9 Stretch chỉ cần chỉnh sửa /etc/bash.bashrc và bỏ ghi chú:

# 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

3

Sao chép tệp cấu hình này từ Ubuntu: / usr / share / bash-xong / xong / apt vào cùng một thư mục trong Jessie. Bạn cũng có thể lấy tệp ở đây: http://pastebin.com/PRBMt3an


Đây là những gì tôi cần. Nhưng hoàn thành tự động không hoạt động cho apt, sau khi tôi sao chép, đổi tên tệp apt đã tải xuống thành / usr / share / bash-xong / hoàn thành /. Làm thế nào để làm cho nó hoạt động?
klor

Tệp pastebin.com/PRBMt3an có trong nguồn cấp dữ liệu Windows CR LF, đây là lý do tại sao nó không hoạt động. Tôi đã phải chuyển đổi định dạng dòng sang nguồn cấp dữ liệu Unix LF, vì vậy sau đó đã hoạt động sau khi bắt đầu một thiết bị đầu cuối mới.
klor

Đây là tệp 'apt' với linefeed chính xác: tệpropper.com/apt_1
klor 17/03/19

1

Làm thế nào tôi giải quyết nó

Tôi có vấn đề hoàn thành tự động cố gắng để tự động hoàn thành wgetvới apt-get install wg[TAB][TAB]và tôi quản lý để giải quyết nó bằng cách loại bỏ các --no-generatetham số từ những con ruồi dưới đây:

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

Điều đáng nói là các tệp này chỉ khả dụng sau khi bạn cài đặt bash-completion.

Các --no-generatetham số tôi đề cập đến có thể được nhìn thấy trong các dòng dưới đây, nhưng tôi loại bỏ tất cả --no-generate, không chỉ từ dòng này: https://github.com/scop/bash-completion/blob/master/completions/apt-get# L28

Làm thế nào tôi đến điểm này?

Tôi đã đến điểm này sau khi chạy set -vtrước đó apt-get install wg[TAB][TAB], điều đó cho thấy lệnh được thực thi là:

apt-cache --no-generate pkgnames wg

và đầu ra là một lỗi:

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

Khi tôi thực hiện apt-cache pkgnames wgmà không có --no-generatechính xác, tôi đã có danh sách tự động hoàn thành:

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

Hi vọng điêu nay co ich.


Đó chính xác là những gì tôi cần. Cảm ơn: D
Ceisc
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.