Зачем использовать 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 , WOS Установка Rig Indigo


Ответы:


43

Обычно функция echoкоманды состоит в отображении строки (фрагмента текста) на консоли. Но это время >символ добавляется после echoкоманды, перенаправляя ее вывод в текстовый файл, /etc/apt/sources.list.d/ros-latest.list.

В общем, вся эта команда записывает фрагмент текста в текстовый файл. Теперь здесь начинается сложная часть:

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

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


19
Собственно, >переписывает текстовый файл, >>добавляет в конец.
Диркт

3
@dirkt Спасибо. Виноват! ;) Это следствие изучения нескольких языков сценариев. Конфликтующее поведение в конечном итоге преследует вас. Даже в DOS> перезаписывает.

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

4
«Если не перенаправлено, стандартный вывод - текстовый терминал, который инициировал программу». Так что да, echoпишет в консоль.

2

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

В дистрибутивах Linux на основе 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)интерпретируются и результат от операционной системы печататься в пользовательском исходных файлы РОС-latest.list которой команда будет создавать при исполнении.


Переводчик командного языка

Команда sh- оболочка Борна . Это один из нескольких оболочек, но он считается старым стандартом, и, как правило, вы можете быть уверены, что он существует. Это также часто встречается 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.