为什么在安装新软件之前使用 echo?

为什么在安装新软件之前使用 echo?

我是计算机领域的新手。在安装 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命令 along with sh -c?我在其他安装过程中也看到过 echo 命令的使用。

笔记 -sh 命令的使用ROS Indigo 安装 Wiki

答案1

通常,命令的功能echo是在控制台上显示一个字符串(一段文本)。但这次,在命令>后面添加了一个字符echo,将其输出重定向到文本文件/etc/apt/sources.list.d/ros-latest.list

基本上,整个命令将一段文本写入文本文件。现在,棘手的部分来了:

写入文件的字符串对于每台计算机可能不同。命令运行$(lsb_release -sc)时,该部分将被解析(更改为其他内容)echo

您可以/etc/apt/sources.list.d/ros-latest.list在命令之前和之后在文本编辑器中打开以亲自查看更改。(该文件可能在此命令之前不存在。)

答案2

包管理和软件存储库

基于 Debian 的 Linux 发行版依靠存储库(应用程序安装包和升级包的数据库)来保持操作系统更新,并轻松获取和安装新软件包。这些存储库的位置存储在 中/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 发行版。例如可靠lsb_release -a这是 Ubuntu 14.04 的代号。您可以使用或查询操作系统(基于 Debian)的完整详细信息,lsb_release -sc这意味着短的代码名称

在您的问题中,该部分$(lsb_release -sc)被解释,并且操作系统的结果是打印进入自定义源文件ros-最新版该命令执行时将创建它。


命令语言解释器

sh命令是伯恩壳。这是几个 shell 中的一个,但被认为是旧标准,通常可以肯定存在。它bash在许多 shell 脚本中也很常见。该声明指定要使用的 shell,因为不同的 shell 使用不同的语法。

关于-c旗帜,引用man bash

如果存在 -c 选项,则命令将从字符串中读取。如果字符串后面有参数,则它们将分配给位置参数,从 $0 开始。

其中的所有内容''都会被读作一个字符串,您不需要弄清楚如何转义各种引号,也不需要担心 shell 会以错误的方式解释某些内容。


总结

该命令打印deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main到自定义源文件,并$(lsb_release -sc)用解释的值替换。

相关内容