Tại sao nên sử dụng echo trước khi cài đặt phần mềm mới?


25

Tôi là người mới trong thế giới điện toán. Trong khi cài đặt ROS Indigo, bước đầu tiên hướng dẫn tôi sử dụng mã sau:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

Tại sao chúng ta sử dụng echolệnh cùng với sh -ctrong bối cảnh này? Tôi cũng đã thấy việc sử dụng lệnh echo trong các quá trình cài đặt khác.

Lưu ý - Sử dụng lệnh sh , Wiki Cài đặt Indigo Wiki


Câu trả lời:


43

Thông thường chức năng của echolệnh là hiển thị một chuỗi (đoạn văn bản) trên bàn điều khiển. Nhưng lần này, một >ký tự được thêm vào sau echolệnh, chuyển hướng đầu ra của nó thành tệp văn bản , /etc/apt/sources.list.d/ros-latest.list.

Về cơ bản, toàn bộ lệnh này ghi một đoạn văn bản vào một tệp văn bản. Bây giờ, đến phần khó khăn:

Chuỗi được ghi vào tệp có thể khác nhau cho mỗi máy tính. Phần $(lsb_release -sc)được giải quyết (thay đổi thành một cái khác) khi echolệnh chạy.

Bạn có thể mở /etc/apt/sources.list.d/ros-latest.listtrong trình soạn thảo văn bản trước và sau lệnh để xem thay đổi cho chính mình. (Tệp có thể không tồn tại trước lệnh này.)


19
Trên thực tế, >ghi đè tập tin văn bản, >>nối đến cuối.
dirkt

3
@dirkt Cảm ơn. Lỗi của tôi! ;) Đó là hậu quả của việc học một số ngôn ngữ kịch bản. Các hành vi xung đột cuối cùng đến ám ảnh bạn. Ngay cả trong DOS,> ghi đè.

10
echoghi vào đầu ra tiêu chuẩn, không phải bàn điều khiển.
Michael Hampton

4
"Trừ khi được chuyển hướng, đầu ra tiêu chuẩn là thiết bị đầu cuối văn bản khởi tạo chương trình." Vì vậy, vâng, echoviết lên bàn điều khiển.

2

Quản lý gói và kho phần mềm

Các bản phân phối Linux dựa trên Debian dựa trên các kho lưu trữ (cơ sở dữ liệu của các gói cài đặt ứng dụng và gói nâng cấp) để giữ cho các hệ điều hành được cập nhật và cũng để dễ dàng tìm nạp và cài đặt các gói phần mềm mới. Vị trí của các kho lưu trữ này được lưu trữ trong /etc/apt/sources.list, tuy nhiên các nguồn bổ sung, thường là duy nhất cho các ứng dụng cụ thể có thể được lưu trữ trong /etc/apt/sources.list.dthư mục.

Khi lệnh cập nhật chỉ mục gói apt-get updateđược thực thi, hệ điều hành của bạn sẽ kiểm tra các kho lưu trữ gói này để biết các gói có sẵn và đăng ký các phần mềm có sẵn cho hệ điều hành mà bạn có thể tiếp tục cài đặt bằng apt-get install <package>lệnh truyền thống .

Một ví dụ về một trong những nguồn phần mềm này là:

deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted

Điều quan trọng là các nguồn này phải tham chiếu các phiên bản phân phối linux cụ thể. Một ví dụ đáng tin cậy là tên mã cho Ubuntu 14.04. Bạn có thể truy vấn hệ điều hành của mình (dựa trên debian) để biết chi tiết đầy đủ với lsb_release -ahoặc lsb_release -sccó nghĩa là tên ngắntên mã .

Trong câu hỏi của bạn, phần $(lsb_release -sc)được diễn giải và kết quả từ hệ điều hành của bạn được in vào tệp nguồn tùy chỉnh ros-muộn.list mà lệnh sẽ tạo khi thực thi.


Thông dịch viên ngôn ngữ lệnh

Các shlệnh là vỏ bourne . Đây là một, trong số nhiều vỏ nhưng được coi là tiêu chuẩn cũ và nói chung là bạn có thể tồn tại. Nó cũng thường thấy bashtrong nhiều kịch bản shell. Tuyên bố đó đang chỉ định shell để sử dụng vì các shell khác nhau sử dụng cú pháp khác nhau.

Liên quan đến -ccờ, trích dẫn man bash:

Nếu tùy chọn -c có mặt, thì các lệnh được đọc từ chuỗi. Nếu có các đối số sau chuỗi, chúng được gán cho các tham số vị trí, bắt đầu bằng $ 0.

Tất cả mọi thứ trong chuỗi ''được đọc dưới dạng một chuỗi, bạn sẽ không cần phải tìm ra cách thoát các dấu ngoặc kép khác nhau hoặc lo lắng về trình bao diễn giải sai cách nào đó.


tl; dr

Lệnh in deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainra một tệp nguồn tùy chỉnh, thay thế $(lsb_release -sc)bằng giá trị được giải thích.

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.