Câu hỏi Chạy một .sh để thực hiện nhiều lệnh


Tôi đã tò mò làm thế nào tôi sẽ đi về chạy nhiều lệnh thông qua kịch bản shell.

Ví dụ, chỉ để thử nó, tôi muốn để có thể kết nối một .desktop đến một .sh mà sẽ chạy tất cả các mã cập nhật vì vậy tôi không phải gõ nó ra. Tôi biết làm thế nào để thực hiện một lệnh duy nhất thông qua một .sh, không nhiều.

Dù sao?


6
2017-07-19 23:50


gốc




Các câu trả lời:


Đơn giản thực sự - bạn cần phải tách các lệnh. Ví dụ:

#!/bin/bash
sudo apt-get update
sudo apt-get upgrade

sẽ cập nhật danh sách gói và sau đó là các gói. Một khả năng khác là điều này (có thể tốt hơn, vì && sẽ chỉ cho phép upgrade lệnh để chạy nếu update thoát thành công):

#!/bin/bash
sudo apt-get update && sudo apt-get upgrade

Điều này sẽ chạy các lệnh để cập nhật danh sách các gói và sau đó là gói. Điều này cần được lưu vào tệp văn bản (ví dụ: updatescript trong thư mục chính). Sau đó bạn có thể làm cho nó thực thi bằng cách chạy:

 chmod +x ./updatescript

hoặc bằng cách nhấp chuột phải vào tệp và làm cho tệp có thể thực thi trong các thuộc tính của tệp:

và chạy nó với điều này trong terminal:

 ./updatescript

Ghi chú:

Có một tùy chọn (-y) có sẵn có thể được sử dụng với upgrade lệnh để nó không nhắc trước khi nâng cấp các gói. Nó là một ý tưởng tốt để kiểm tra những gì apt-get đang làm trước khi nó nâng cấp các gói, vì nó có thể / sẽ làm điều gì đó ngu ngốc hoặc một cái gì đó bạn không muốn nó làm. Thông tin thêm về các tùy chọn như thế này có thể được tìm thấy bằng cách chạy man apt-get.

Điều này cũng có nghĩa là nó là lý tưởng hơn để sử dụng các thiết bị đầu cuối để chạy kịch bản, như bạn có thể kiểm tra những gì nó đang cập nhật, và sau đó chạy nó. Nếu bạn muốn có một cách GUI để chạy các bản cập nhật, hãy sử dụng trung tâm phần mềm vì nó là những gì nó được cho.


7
2017-07-20 01:14





Chỉ cần thêm một vài điểm vào câu trả lời tuyệt vời của @Wilf,

bạn có thể chạy lệnh song song nếu bạn muốn vì bất kỳ lý do nào, ví dụ: autostart tập lệnh cho OpenBox có thể trông giống như sau:

#!/bin/bash

nitrogen --restore &
tint2 &
tilda

Thao tác này sẽ đặt hình nền bằng nitrogen, bắt đầu bảng điều khiển tint2 và khởi động bảng điều khiển thả xuống kiểu Quake3 tilda, Tất cả cùng một lúc. Điều này rất hữu ích nếu bạn không cần một chương trình để hoàn thành trước khi bạn khởi chạy chương trình tiếp theo. Không phải như vậy apt-get update và apt-get upgrade Tuy nhiên!

Lưu ý & ký vào cuối mỗi dòng. Điều này sẽ làm cho vỏ để ngã ba mà quá trình vào nền và tiếp tục thực hiện. Lưu ý nó khác với &&, về cơ bản là and ký tên, command_1 && command_2 sẽ thực thicommand_1 và nếu nó thoát với thành công, chỉ sau đó chạy command_2, trong khi command_1 & command_2 sẽ bắt đầu lần thứ hai ngay sau lần đầu tiên.


Ngoài ra, bạn có thể chỉ cần ngăn xếp các lệnh để có chúng thực thi serially, như vậy:

#!/bin/bash

apt-get update
apt-get upgrade

Điều này sẽ chạy apt-get upgrade sau apt-get update Là đã kết thúc, nhưng bất kể kết quả là gì. Vì vậy, ngay cả khi, ví dụ, bản cập nhật thoát với một lỗi mạng, việc nâng cấp vẫn sẽ được chạy.

Bạn cũng có thể làm điều này trong một dòng, bằng cách sử dụng ; ký tên: apt-get update ; apt-get upgrade. Một lần nữa, giải pháp này là không tối ưu cho các lệnh cụ thể này, nhưng nó có thể có ích trong các tình huống khác.


Một điểm cuối cùng nhanh chóng, bạn cũng có thể phá vỡ các dòng chứa && như vậy:

command_1 &&
command_2

Điều này sẽ giống như command_1 && command_2.


4
2017-07-20 02:15