Yeni bir yazılım yüklemeden önce neden yankı kullanıyorsunuz?


25

Bilgisayar dünyasında yeniyim. ROS Indigo yüklerken, ilk adım beni aşağıdaki kodu kullanmaya yönlendirir:

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

Bu bağlamda neden echokomutu birlikte kullanıyoruz sh -c? Echo komutunun diğer kurulum işlemlerinde de kullanıldığını gördüm.

Not - sh komutunun kullanımı , ROS Indigo Installation Wiki


Yanıtlar:


43

Normalde echokomutun işlevi konsolda bir dize (metin parçası) göstermektir. Fakat bu sefer komuttan >sonra bir karakter eklenir echo, çıktısını bir metin dosyasına yönlendirir /etc/apt/sources.list.d/ros-latest.list,.

Temel olarak, bu komutun tamamı bir metin dosyasına bir metin metni yazar. Şimdi, işte zor kısım geliyor:

Dosyaya yazılan dize her bilgisayar için farklı olabilir. Komut çalıştığında parça $(lsb_release -sc)çözülür (başka bir şeye değiştirilir) echo.

Sen açabilirsiniz /etc/apt/sources.list.d/ros-latest.listkendiniz değişiklik görmek için önce ve komutundan sonra bir metin editörü. (Bu komuttan önce dosya olmayabilir.)


19
Aslında, >metin dosyasının üzerine yazar, >>sonuna ekler.
dirkt

3
@dirkt Teşekkürler. Benim hatam! ;) Birkaç kodlama dili öğrenmenin sonucu budur. Çelişkili davranış sonunda sizi rahatsız eder. DOS'ta bile,> üzerine yazar.

10
echokonsola değil standart çıktıya yazar.
Michael Hampton,

4
"Yeniden yönlendirilmedikçe, standart çıktı programı başlatan metin terminalidir." Yani, evet, echokonsola yazıyor.

2

Paket Yönetimi ve Yazılım Depoları

Debian tabanlı Linux dağıtımları, işletim sistemlerini güncel tutmak ve ayrıca yeni yazılım paketlerini kolayca almak ve kurmak için havuzlara (uygulama kurulum paketleri ve yükseltme paketleri veritabanlarına) dayanmaktadır. Bu havuzların yerleri depolanır /etc/apt/sources.list, ancak genellikle belirli uygulamalara özgü ek kaynaklar, /etc/apt/sources.list.ddizinde saklanabilir .

Paket dizini güncelleme komutu apt-get updateyürütüldüğünde, işletim sisteminiz mevcut paketler için bu paket havuzlarını kontrol eder ve geleneksel apt-get install <package>komutu kullanarak kurmaya devam edebileceğiniz mevcut yazılımları işletim sisteminize kaydeder .

Bu yazılım kaynaklarından birine örnek:

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

Bu kaynakların linux dağıtımlarının belirli sürümlerini referans alması önemlidir. Bir örnek, Ubuntu 14.04'ün kod adı olan güvenilirdir . İşletim sisteminizi (debian tabanlı) kısa veya kod adı olan lsb_release -aveya ile birlikte ayrıntılı bilgi için sorgulayabilirsiniz .lsb_release -sc

Sorunuzda , bölüm $(lsb_release -sc)yorumlanır ve işletim sisteminizin sonucu, çalıştırma sırasında komutun oluşturacağı özel kaynak dosyasına ros-latest.list'e yazdırılır .


Komut dili tercümanı

shKomuttur Bourne kabuk . Bu, birkaç merminin arasında, ancak eski standart olarak kabul edilir ve genellikle sizin emin olabileceğiniz bir tanesidir. Ayrıca bashbirçok kabuk komut dosyasında görmek de yaygındır . Bu beyan, farklı mermiler farklı sözdizimi kullandığından kullanılacak kabuğun belirtilmesidir.

Olarak gördüğü -calıntı, bayrak man bash:

-C seçeneği varsa, komutlar dizeden okunur. Dize sonra argümanlar varsa, onlar $ 0 ile başlayan konumsal parametrelere atanır.

İçindeki her şey ''bir dize olarak okunur, çeşitli tırnak işaretlerinden nasıl kaçacağınızı ya da bir şeyi yanlış bir şekilde yorumlayan kabuk için endişelenmenize gerek kalmayacak.


tl; Dr.

Komut , yorumlanan değerle deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) maindeğiştirilerek özel bir kaynak dosyaya yazdırır $(lsb_release -sc).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.