Mengapa menggunakan gema sebelum menginstal perangkat lunak baru?

25

Saya baru di dunia komputasi. Saat memasang ROS Indigo, langkah pertama mengarahkan saya untuk menggunakan kode berikut:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

Mengapa kita menggunakan echoperintah bersama sh -cdalam konteks ini? Saya telah melihat penggunaan perintah echo dalam proses instalasi lain juga.

Catatan - Penggunaan perintah sh , ROS Indigo Installation Wiki

Pallav Bakshi
sumber

Jawaban:

43

Biasanya fungsi echoperintah adalah untuk menampilkan string (sepotong teks) pada konsol. Tapi kali ini, >karakter ditambahkan setelah echoperintah, mengarahkan outputnya ke file teks /etc/apt/sources.list.d/ros-latest.list,.

Jadi pada dasarnya, seluruh perintah ini menulis sepotong teks ke file teks. Sekarang, inilah bagian yang sulit:

String yang ditulis ke file mungkin berbeda untuk setiap komputer. Bagian $(lsb_release -sc)ini diselesaikan (diubah menjadi sesuatu yang lain) ketika echoperintah dijalankan.

Anda dapat membuka /etc/apt/sources.list.d/ros-latest.listeditor teks sebelum dan sesudah perintah untuk melihat perubahannya sendiri. (File mungkin tidak ada sebelum perintah ini.)


sumber
19
Sebenarnya, >menimpa file teks, >>menambahkan sampai akhir.
dirkt
3
@ sangat berterima kasih. Salahku! ;) Itulah konsekuensi dari belajar beberapa bahasa scripting. Perilaku yang saling bertentangan akhirnya menghantui Anda. Bahkan di DOS,> menimpa.
10
echomenulis ke output standar, bukan konsol.
Michael Hampton
4
"Kecuali diarahkan, output standar adalah terminal teks yang memulai program." Jadi, ya, echomenulis ke konsol.
2

Manajemen Paket dan Repositori Perangkat Lunak

Distribusi Linux berbasis Debian mengandalkan repositori (database paket instalasi aplikasi dan paket peningkatan) untuk menjaga sistem operasi diperbarui dan juga untuk dengan mudah mengambil dan menginstal paket perangkat lunak baru. Lokasi repositori ini disimpan /etc/apt/sources.list, namun sumber tambahan, biasanya unik untuk aplikasi tertentu dapat disimpan dalam /etc/apt/sources.list.ddirektori.

Ketika perintah pembaruan indeks paket apt-get updatedijalankan, sistem operasi Anda memeriksa dengan repositori paket ini untuk paket yang tersedia dan mendaftarkan perangkat lunak yang tersedia sebagai tersedia untuk sistem operasi Anda yang dapat Anda lanjutkan untuk menginstal menggunakan apt-get install <package>perintah tradisional .

Contoh dari salah satu sumber perangkat lunak ini adalah:

deb http://us-west-2.ec2.archive.ubuntu.com/ubuntu/ trusty main restricted

Penting bagi sumber-sumber ini untuk merujuk versi distribusi linux tertentu. Contohnya adalah trusty yang merupakan nama kode untuk Ubuntu 14.04. Anda dapat meminta OS Anda (berbasis debian) untuk detail lengkap dengan lsb_release -aatau lsb_release -scyang berarti pendek dan nama kode .

Dalam pertanyaan Anda, bagian $(lsb_release -sc)ditafsirkan dan hasil dari sistem operasi Anda dicetak ke dalam file sumber kustom ros-latest.list yang akan dibuat oleh perintah setelah dieksekusi.


Penerjemah bahasa perintah

The shperintah adalah shell Bourne . Ini adalah satu, di antara beberapa kerang tetapi dianggap sebagai standar lama dan umumnya yang Anda yakini ada. Ini juga biasa dilihat bashdi banyak skrip shell. Deklarasi itu menentukan shell untuk digunakan karena shell yang berbeda menggunakan sintaks yang berbeda.

Mengenai -cbendera, mengutip man bash:

Jika opsi -c hadir, maka perintah dibaca dari string. Jika ada argumen setelah string, mereka ditugaskan ke parameter posisi, dimulai dengan $ 0.

Segala sesuatu di dalam ''dibaca sebagai string, Anda tidak perlu mencari cara untuk menghindari berbagai tanda kutip atau khawatir tentang shell menafsirkan sesuatu dengan cara yang salah.


tl; dr

Perintah mencetak deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) mainke file sumber kustom, menggantikan $(lsb_release -sc)dengan nilai yang ditafsirkan.

Muntah
sumber