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-get
và nó không có chức năng này. Tất nhiên tôi vẫn có thể cài đặt aptitude
và 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.sh
vớ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 PATH
biế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 root
tà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ụ: "!", "*", "?", ...)