コンピューティングの世界は初めてです。 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コマンドが使用されるのを見てきました。
通常、echo
コマンドの機能は、コンソールに文字列(テキストの一部)を表示することです。しかし今回は、echo
コマンドの後に_>
_文字が追加され、その出力がテキストファイル_/etc/apt/sources.list.d/ros-latest.list
_にリダイレクトされます。
したがって、基本的に、このコマンド全体がテキストファイルにテキストの一部を書き込みます。さて、ここでトリッキーな部分があります:
ファイルに書き込まれる文字列は、コンピューターごとに異なる場合があります。 echo
コマンドを実行すると、$(lsb_release -sc)
の部分が解決されます(別のものに変更されます)。
コマンドの前後にテキストエディターで_/etc/apt/sources.list.d/ros-latest.list
_を開いて、変更を確認できます。 (このコマンドの前にファイルが存在しない可能性があります。)
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ディストリビューションの特定のバージョンを参照することが重要です。例は、Ubuntu 14.04のコード名であるtrustyです。 lsb_release -a
またはlsb_release -sc
を使用して、OS(debianベース)に完全な詳細を照会できます。つまり、shortおよびcodename。
あなたの質問では、$(lsb_release -sc)
という部分が解釈され、オペレーティングシステムからの結果はprintedされてカスタムソースファイルros-になります。コマンドが実行時に作成するlatest.list。
sh
コマンドは ボーンシェル です。これはいくつかのシェルの1つですが、古い標準と見なされており、通常は存在することが確実なものです。多くのシェルスクリプトでbash
を参照することも一般的です。その宣言は、異なるシェルが異なる構文を使用するので、使用するシェルを指定しています。
-c
フラグについては、man bash
を引用します。
-cオプションが存在する場合、コマンドは文字列から読み取られます。文字列の後に引数がある場合、それらは$ 0から始まる定位置パラメーターに割り当てられます。
''
内のすべてが文字列として読み取られます。さまざまな引用符をエスケープする方法を理解したり、シェルが何かを間違った方法で解釈することを心配する必要はありません。
このコマンドは、deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main
をカスタムソースファイルに出力し、$(lsb_release -sc)
を解釈された値に置き換えます。