Làm thế nào để tôi viết một tập lệnh shell cài đặt ứng dụng?


39

Có ai biết làm thế nào để viết một kịch bản shell để cài đặt một danh sách các ứng dụng? Thật khó khăn khi phải cài đặt từng ứng dụng bằng tay mỗi khi tôi thiết lập một hệ thống mới.

Chỉnh sửa: Nó vẫn hỏi tôi Do you want to continue [Y/n]?. Có cách nào để có đầu vào tập lệnh yhoặc cho nó không nhắc nhở cho đầu vào?


2
Đã từng có một chương trình gọi là "có" đã làm điều đó. (Nó đã viết 'y' liên tục cho STDOUT.)
Nathan Osman

Câu trả lời:


38

Tôi cho rằng kịch bản sẽ trông giống như thế này:

#!/bin/sh
apt-get update  # To get the latest package lists
apt-get install <package name> -y
#etc.

Chỉ cần lưu nó như một cái gì đó như install_my_apps.sh, thay đổi các thuộc tính của tệp để làm cho nó có thể thực thi được và chạy nó từ dòng lệnh dưới dạng root.

( Chỉnh sửa: Các -ybảo apt-getkhông để nhắc nhở bạn và chỉ nhận được trên với việc cài đặt)


Làm thế nào để làm cho nó thực thi? Tôi giả sử tôi sẽ chạy nó như sau: sudo ./install_my_apps.sh
jumpnett

Tôi không chắc chắn liệu có cần thiết để làm cho nó có thể thực thi được không (Tôi là một người Python; không có nhiều trong BASH). Nhưng nếu bạn phải, nó có thể được thực thi với chmod +x ./install_my_apps.sh.
Michael Crenshaw

Hoặc nhấp chuột phải vào nó, chọn "Thuộc tính". Trong cửa sổ mở ra, hãy chuyển đến tab "Quyền" và chọn hộp kiểm có nội dung "Cho phép thực thi tệp dưới dạng chương trình"
jfoucher

6
Tôi không biết tại sao đây là CW, nhưng dù sao tôi cũng chỉnh sửa nó để đặt -ycờ. Lưu ý: Nếu bạn muốn làm cho nó trông rõ ràng hơn, bạn có thể sử dụng --yeshoặc --assume-yesthay thế -y.
Umang

20

Vâng, theo câu hỏi của bạn, kịch bản đơn giản nhất sẽ là:

#!/bin/sh
LIST_OF_APPS="a b c d e"

aptitude update
aptitude install -y $LIST_OF_APPS

Tuy nhiên bạn cũng có thể nhập aptitude update && aptitude install -y a b c d e. Vì vậy, có thể câu hỏi của bạn đang thiếu điểm quan trọng ở đây. Nếu có thêm một số yêu cầu, sẽ rất tốt để giải thích chúng.


1
Lưu ý rằng apt-get sẽ hoạt động như một sự thay thế thả xuống cho năng khiếu ở đây, nếu đó là sở thích của bạn. Chỉ cần thay thế cả hai trường hợp "aptitude" bằng "apt-get".
Michael Crenshaw

12

Chỉ cần tạo một danh sách các ứng dụng trong một tệp, example.list và chạy

cat example.list | xargs sudo apt-get -y install

điều này thật tuyệt. không bao giờ biết làm thế nào để đưa một danh sách các gói vào apt trước đây!
Thufir

xargs cung cấp các đường ống vào bất kỳ lệnh nào, bằng cách thêm chúng vào làm đối số
Xerus

2

Tôi sẽ chọn cho kịch bản sau đây: vim install

#!/bin/bash
apt-get update  # To get the latest package lists
apt-get install $1 -y

Sau đó, tôi nên làm cho kịch bản trên thực thi chmod +x install. Sau đó, để sử dụng nó, tôi có thể gõ : ./install <package_name>. Thí dụ:./install clang


1
Tôi muốn tất cả các chương trình được liệt kê trong tập tin. Với phương pháp này, tôi vẫn sẽ phải nhập tên chương trình dưới dạng đối số dòng lệnh, vì vậy thực sự không có lợi ích gì.
jumpnett

1
@jumpnett Lol, tôi đã bỏ lỡ điểm danh sách. Tôi đang bắt đầu thiếu caffeine và nó cho thấy. Thành thật xin lỗi vì điều đó. Có thể cập nhật câu trả lời.
NlightNFotis

Thêm vào đó, nó sẽ chạy updatecho mọi chương trình cài đặt, tốn thời gian. Và nó cần sudo.
Gauthier

Điều này là vô cùng không cần thiết. Bạn cũng có thể đưa alias install='sudo apt-get install -y'vào.bash_aliases
Xerus

-1
#!/bin/bash

set -eu -o pipefail # fail on error , debug all lines

sudo -n true
test $? -eq 0 || exit 1 "you should have sudo priveledge to run this script"

echo installing the must-have pre-requisites
while read -r p ; do sudo apt-get install -y $p ; done < <(cat << "EOF"
    perl
    zip unzip
    exuberant-ctags
    mutt
    libxml-atom-perl
    postgresql-9.6
    libdbd-pgsql
    curl
    wget
    libwww-curl-perl
EOF
)

echo installing the nice-to-have pre-requisites
echo you have 5 seconds to proceed ...
echo or
echo hit Ctrl+C to quit
echo -e "\n"
sleep 6

sudo apt-get install -y tig

1
vui lòng thêm giải thích và sửa tất cả các lỗi chính tả này
Xerus

Theo bạn cần giải thích dòng nào?!
Yordan Georgiev

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.