Tự động hoàn thành Apt-get


9

Tôi hiện đang chạy Debian 64-bit Wheezy.

Tôi gặp một số rắc rối với việc hoàn thành tự động cho apt-get. Tôi đã cài đặt bash-xong.

Nếu tôi đăng nhập bằng root trong shell, tôi có thể sử dụng tự động hoàn thành cho apt-get (ví dụ: apt-get install wicd [tab] [tab ]) và nó sẽ hiển thị cho tôi tất cả các gói phù hợp với điều đó. Nhưng nếu tôi cố gắng sử dụng hoàn thành tự động cho apt-get trong một người dùng không phải root khác (ngay cả với sudo) thì nó cũng không hoạt động. Tôi có thể tự động hoàn thành những thứ khác như tên tập tin.

Có ai giúp đỡ không?

Tôi có mã sau đây trong .bashrc và / etc / profile của tôi

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

1
Đầu tiên, hãy kiểm tra xem root và những người dùng khác có cùng shell hay không. Nếu không, đó là lý do cho các hành vi khác nhau. Nếu không, hãy thử điều này: 'apt-cache --no-tạo pkgnames "wicd"'. Nó có hoạt động không? Đó là những gì bash sử dụng để tạo ra việc hoàn thành 'apt-get install wicd [TAB]'.
angus

Cả hai đều sử dụng cùng một vỏ, bash. lệnh apt-cache mà bạn đã cho tôi hoạt động và hiển thị danh sách tất cả các gói wicd. Ngoài ra, những gì tôi phát hiện ra là khi máy tính của tôi khởi động lần đầu tiên và tôi đăng nhập vào vỏ lần đầu tiên (tôi không có đăng nhập gui), tự động hoàn thành apt-get sẽ hoạt động với bất kỳ tài khoản nào. Nhưng nếu tôi chạy trình quản lý cửa sổ tinh thể fvwm của mình bằng startx, sau đó mở một thiết bị đầu cuối, nó sẽ không hoạt động trở lại chỉ với tài khoản người dùng của tôi. Nó vẫn hoạt động với root trong fvwm-crystal.
Dennis Linuz

OK, đây là những gì có thể xảy ra. / etc / profile và .bash_profile được chạy trên shell đăng nhập. Đó là, khi bạn đăng nhập trên bảng điều khiển hoặc khi bạn chạy 'su'. Vì trong những trường hợp hoàn thành công việc, / etc / profile đang hoạt động. Những gì còn lại là ~ / .bashrc. Kiểm tra xem dòng đó '. / etc / bash_completion 'đang thực sự được thực thi. Đặt một cái gì đó như 'echo OK' trước nó, mở một thiết bị đầu cuối mới và kiểm tra xem nó 'OK'.
angus

bạn đã bao giờ thử nghiệm ZSH chưa?
Mohammad Efazati

.Bashrc của bạn có thể bị thiếu hoàn toàn; đây là trường hợp của tôi
Galvani

Câu trả lời:


6

/etc/bash_completionTập tin của bạn phải bị thiếu.

sudo apt-get install bash-completion

nên giải quyết tất cả các vấn đề của bạn.

Cho rằng bạn đã có các dòng không bị /etc/bash.bashrcthiếu như Faheem Mitha và những người khác đã chỉ ra, nó sẽ hoạt động ngay bây giờ:

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

Lý do: bash-completionGói hiện có tệp đó (/ etc / bash_completion). Nó được sử dụng trong bashgói, nhưng không còn nữa.

thông tin về thay đổi gói


những gì nên có trong tập tin / etc / bash_completion ? Tôi đã chạy lệnh cài đặt bash-xong và mọi thứ đã là phiên bản mới nhất nhưng tệp hoàn thành bash của tôi trống
fifamaniac04

2

Hãy thử chạy nó:

chsh -s /bin/bash $USER

1

Tôi không thể nhớ nếu điều này là cần thiết, nhưng hãy thử bỏ qua các dòng tương ứng từ /etc/bash.bashrcnếu chưa bị thiếu, cụ thể là

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

0

Theo tôi nhớ, bash autocompletion cho các tham số lệnh được thực hiện thông qua completelệnh. Bạn nên có một tập lệnh hoàn thành apt-get được tải bởi người dùng root bashrc (có thể là /root/.bashrc), vì vậy bạn cần đăng nhập root để chạy nó. Sudo không tải tập lệnh đăng nhập gốc, nó chỉ cung cấp cho bạn đặc quyền.

Có thể bạn đang thiếu tập lệnh tự động hoàn thành cho người dùng không phải root, vì vậy họ không có bash autocompionion được cấu hình cho apt-get. Nếu đó là sự thật, hãy tải các chức năng đó cho người dùng có TẤT CẢ các đặc quyền trong tệp sudoers.

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.