Навіщо використовувати echo перед встановленням нового програмного забезпечення?


25

Я новачок у світі обчислень. Під час встановлення ROS Indigo, перший крок спрямовує мене на використання наступного коду:

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

Чому в цьому контексті ми використовуємо echoкоманду sh -c? Я бачив використання команди echo і в інших установочних процесах.

Примітка - Використання команди sh , ROS Indigo Installation Wiki


Відповіді:


43

Зазвичай функцією echoкоманди є відображення рядка (фрагмента тексту) на консолі. Але цей час, >символ додається після echoкоманди, перенаправляючи її висновок в текстовий файл, /etc/apt/sources.list.d/ros-latest.list.

Таким чином, вся ця команда записує фрагмент тексту в текстовий файл. Тепер, ось ось, яка складна частина:

Рядок, записаний у файл, може бути різним для кожного комп'ютера. Частина $(lsb_release -sc)вирішується (змінюється на щось інше), коли echoкоманда запускається.

Ви можете відкрити /etc/apt/sources.list.d/ros-latest.listтекстовий редактор до та після команди, щоб побачити зміни. (Файл може не існувати до цієї команди.)


19
Власне, >перезаписує текстовий файл, >>додає до кінця.
dirkt

3
@dirkt Дякую Моє ліжко! ;) Це наслідок вивчення декількох мов сценарію. Конфліктна поведінка з часом переслідує вас. Навіть у DOS> перезаписує.

10
echoпише на стандартний вихід, а не на консоль.
Майкл Хемптон

4
"Якщо не буде переспрямовано, стандартний вихід - це текстовий термінал, який ініціював програму." Отже, так, echoпише до консолі.

2

Управління пакетами та сховища програмного забезпечення

Дистрибутиви на базі Debian покладаються на сховища (бази даних пакетів для встановлення додатків та пакети оновлення) для оновлення операційних систем, а також для легкого добору та встановлення нових програмних пакетів. Розташування цих сховищ зберігається в /etc/apt/sources.list, однак додаткові джерела, зазвичай унікальні для конкретних програм, можуть зберігатися в /etc/apt/sources.list.dкаталозі.

Коли apt-get updateвиконується команда оновлення індексу пакета , ваша операційна система перевіряє у цих сховищах пакетів наявні пакети та реєструє наявні програмні засоби як доступні для вашої операційної системи, які ви можете продовжувати встановлювати за допомогою традиційної apt-get install <package>команди.

Прикладом одного з таких джерел програмного забезпечення є:

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

Для цих джерел важливо посилатися на конкретні версії дистрибутивів Linux. Приклад - надійний , кодове ім'я для Ubuntu 14.04. Ви можете запитувати вашу ОС (на базі debian) для отримання повних деталей з lsb_release -aабо, lsb_release -scщо означає, коротке та ім'я коду .

У вашому запитання частина $(lsb_release -sc)інтерпретується, а результат з вашої операційної системи друкується у користувальницький вихідний файл ros-latest.list, який команда створить після виконання.


Перекладач мови команди

shКоманда є Bourne оболонки . Це одна, серед кількох снарядів, але вона вважається старим стандартом і, як правило, одна, ви можете бути впевнені, що існує. Це також часто зустрічається bashв багатьох скриптах оболонок. Ця декларація визначає оболонку для використання, оскільки різні оболонки використовують різний синтаксис.

Щодо -cпрапора, цитуючи man bash:

Якщо параметр -c присутній, то команди зчитуються з рядка. Якщо після рядка є аргументи, вони присвоюються позиційним параметрам, починаючи з $ 0.

Все, що ''знаходиться в тексті, читається як рядок, вам не потрібно буде з'ясовувати, як уникнути різних лапок або переживати, як оболонка трактує щось не так.


тл; д-р

Команда друкує deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainу користувальницький вихідний файл, замінюючи $(lsb_release -sc)інтерпретоване значення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.