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

2 ответа2

43

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

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

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

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

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 что означает short и кодовое имя.

В вашем вопросе, часть $(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) интерпретированным значением.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .