Buộc apt-get nhắc nhở có / không


11

Có cách nào để buộc apt-gethiển thị có / không có dấu nhắc không? Một --force-yestùy chọn tồn tại, nhưng dường như không có --force-prompthoặc tùy chọn tương tự. Nếu bạn cố gắng cài đặt một gói có tất cả các phụ thuộc đã được cài đặt, nó sẽ bắt đầu cài đặt mà không hiển thị lời nhắc có / không. Điều này có thể gây khó chịu nếu bạn muốn xem xét liệu các phụ thuộc có tồn tại hay không và những phụ thuộc nào sẽ được cài đặt bởi vì bạn không biết liệu các phụ thuộc tiềm năng có được cài đặt trước không.

LƯU Ý: Khi nào thì apt apt-get cài đặt, hãy hỏi tôi để xác nhận xem tôi có muốn tiếp tục hay không? có phần liên quan ở chỗ nó mô tả theo những điều kiện tiêu chuẩn mà dấu nhắc được hiển thị. Tôi quan tâm để biết làm thế nào để buộc nó mặc dù.


1
"Điều này có thể gây khó chịu nếu bạn muốn xem xét liệu các phụ thuộc có tồn tại hay không và những cái nào sẽ được cài đặt." Tôi bối rối vì điều này. Nếu không có phụ thuộc đang được cài đặt, bạn đang xem xét cái gì?
Faheem Mitha

2
Câu hỏi thú vị. Dường như không có cách nào để làm điều này, thiếu bản vá apt-getvới một tùy chọn phù hợp. Tuy nhiên, thẳng thắn, tùy chọn giả thuyết này có vẻ không hữu ích lắm đối với tôi.
Faheem Mitha

@FaheemMitha Mục đích của tôi để làm điều này là việc tìm ra những phụ thuộc mới có thể / sẽ được cài đặt bằng cách sử dụng dễ dàng apt-get installhơn nhiều apt-cache showpkg.
dùng369450

Câu trả lời:


10

Không có cách nào để làm điều này với việc triển khai apt-get hiện tại, bạn sẽ cần phải mở một yêu cầu tính năng và kháng cáo cho người bảo trì. Hành vi hiện tại của apt-get là khi danh sách các gói bạn khai báo được cài đặt hoàn toàn bằng với số lượng gói sẽ được cài đặt và không có gói nào khác bị ảnh hưởng khi nâng cấp hoặc phá vỡ, apt-get cho rằng người dùng đã sử dụng chắc chắn về những gì sẽ được thực hiện , nếu bạn không chắc chắn hoặc muốn phân tích những gì sẽ được thực hiện mà không thực sự cài đặt gói, bạn có thể sử dụng khuyến nghị của Costas-s, --simulate, --just-print, --dry-run, --recon, --no-act .

Có các công cụ khác như apt-listbugs sẽ phân tích các phiên bản của các gói sẽ được cài đặt trước khi bạn thực sự cài đặt chúng (trong trường hợp này là các lỗi) và cảnh báo bạn.


4

Lệnh giả sử yeschỉ trong trường hợp cài đặt một gói (được khởi tạo từ dòng lệnh) VÀ tất cả các phụ thuộc trong hệ thống đã có nghĩa là không có gì để cài đặt ngoại trừ một gói được yêu cầu.

Nói cách khác "nếu không có gì để xem (không có gói bổ sung) thì không có lời nhắc (không có gì để yêu cầu)".

Đối với mục đích thử nghiệm, bạn có thể sử dụng một khóa -s, --simulate, --just-print, --dry-run, --recon, --no-act


@cpburnz nếu all dependecies are installedbạn đã không được hứa hẹn nên mọi gói khác sẽ không được cài đặt.
Costas

0

Câu hỏi cũ, tôi có thể thấy, nhưng trong tình huống tương tự bây giờ. Thông thường tôi sử dụng sudo aptitude install -P PACKAGE_NAME, những gì luôn luôn yêu cầu trước khi cài đặt. Tuy nhiên, bây giờ trong trình quản lý gói mặc định của Debian là apt|apt-getvà nó không có chức năng này. Tất nhiên tôi vẫn có thể cài đặt aptitudevà sử dụng nó ... Tuy nhiên tôi đã viết hàm / tập lệnh bao bọc sh / bash nhỏ apt-getđể hỏi trước khi cài đặt. Nó thực sự thô và tôi đã viết nó như là một chức năng trong thiết bị đầu cuối của tôi.

$ f () { sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf'; read -p 'Do You want to continue (y/N): ' ans; case $ans in [yY] | [yY][eE][sS]) sudo apt-get -y install "$@";; *);; esac; }

Bây giờ, hãy làm cho nó rõ ràng hơn:

f () {
  # Do filtered simulation - without lines contains 'Inst' and 'Conf'
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';

  # Interact with user - If You want to proceed and install package(s),
  # simply put 'y' or any other combination of 'yes' answer and tap ENTER.
  # Otherwise the answer will be always not to proceed.
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      # Because we said 'yes' I put -y to proceed with installation
      # without additional question 'yes/no' from apt-get 
      sudo apt-get -y install "$@";
    ;;
    *)
      # For any other answer, we just do nothing. That means we do not install
      # listed packages.
    ;;
  esac
}

Để sử dụng chức năng này như một tập lệnh sh / bash, chỉ cần tạo tệp tập lệnh, ví dụ như my_apt-get.shvới nội dung (Lưu ý: danh sách không chứa nhận xét, để làm cho nó ngắn hơn một chút ;-)):

#!/bin/sh

f () {
  sudo apt-get --simulate install "$@" | grep -v '^Inst\|^Conf';
  read -p 'Do You want to continue (y/N): ' ans;
  case $ans in
    [yY] | [yY][eE][sS])
      sudo apt-get -y install "$@";
    ;;
    *)

    ;;
  esac
}

f "$@"

Sau đó đặt nó vào ví dụ trong ~/bin/và làm cho nó thực thi được $ chmod u+x ~/bin/my_apt-get.sh. Nếu thư mục ~/binđược bao gồm trong PATHbiến của bạn , bạn sẽ có thể thực hiện nó đơn giản bằng cách:

$ my_apt-get.sh PACKAGE_NAME(S)_TO INSTALL

Xin lưu ý:

  • Mã không sử dụng sudo. Nếu bạn sử dụng roottài khoản, có lẽ bạn cần phải điều chỉnh nó.
  • Mã không hỗ trợ tự động hoàn thành shell
  • Không biết làm thế nào mã làm việc với các mẫu shell (ví dụ: "!", "*", "?", ...)
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.