Я новичок в компьютерном мире. При установке 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
Ответы:
Обычно функция
echo
команды состоит в отображении строки (фрагмента текста) на консоли. Но это время>
символ добавляется послеecho
команды, перенаправляя ее вывод в текстовый файл,/etc/apt/sources.list.d/ros-latest.list
.В общем, вся эта команда записывает фрагмент текста в текстовый файл. Теперь здесь начинается сложная часть:
Строка, записанная в файл, может отличаться для каждого компьютера. Часть
$(lsb_release -sc)
разрешается (превращается во что-то другое) при выполненииecho
команды.Вы можете открыть
/etc/apt/sources.list.d/ros-latest.list
в текстовом редакторе до и после команды, чтобы увидеть изменения для себя. (Файл может не существовать до этой команды.)источник
>
переписывает текстовый файл,>>
добавляет в конец.echo
пишет в стандартный вывод, а не в консоль.echo
пишет в консоль.Управление пакетами и хранилища программного обеспечения
В дистрибутивах Linux на основе Debian используются репозитории (базы данных пакетов установки приложений и пакетов обновлений) для обновления операционных систем, а также для простого извлечения и установки новых пакетов программного обеспечения. Местоположение этих репозиториев хранится в
/etc/apt/sources.list
, однако в/etc/apt/sources.list.d
каталоге могут храниться дополнительные источники, обычно уникальные для конкретных приложений .Когда выполняется команда обновления индекса пакета
apt-get update
, ваша операционная система проверяет с помощью этих репозиториев пакетов доступные пакеты и регистрирует доступные программные продукты как доступные для вашей операционной системы, которые вы можете продолжить устанавливать с помощью традиционнойapt-get install <package>
команды.Пример одного из этих источников программного обеспечения:
Для этих источников важно ссылаться на конкретные версии дистрибутивов Linux. В качестве примера можно привести верное кодовое имя для Ubuntu 14.04. Вы можете запросить вашу ОС (на основе Debian) для получения полной информации с помощью
lsb_release -a
илиlsb_release -sc
что означает сокращенное и кодовое имя .В вашем вопросе, часть
$(lsb_release -sc)
интерпретируются и результат от операционной системы печататься в пользовательском исходных файлы РОС-latest.list которой команда будет создавать при исполнении.Переводчик командного языка
Команда
sh
- оболочка Борна . Это один из нескольких оболочек, но он считается старым стандартом, и, как правило, вы можете быть уверены, что он существует. Это также часто встречаетсяbash
во многих сценариях оболочки. В этом объявлении указывается оболочка для использования, так как разные оболочки используют разный синтаксис.Что касается
-c
флага, цитируюman bash
:Все, что внутри,
''
читается как строка, вам не нужно разбираться, как избежать различных кавычек или беспокоиться о том, что оболочка интерпретирует что-то неправильно.ТЛ; др
Команда печатает
deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main
в пользовательский исходный файл, заменяя$(lsb_release -sc)
его интерпретированным значением.источник