Po co używać echa przed instalacją nowego oprogramowania?

25

Jestem nowy w świecie komputerów. Podczas instalowania ROS Indigo pierwszy krok każe mi użyć następującego kodu:

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

Dlaczego w tym kontekście używamy echopolecenia sh -c? Widziałem użycie polecenia echo także w innych procesach instalacyjnych.

Uwaga - użycie polecenia sh , Wiki instalacji ROS Indigo

Pallav Bakshi
źródło

Odpowiedzi:

43

Zwykle funkcją echopolecenia jest wyświetlenie ciągu (fragmentu tekstu) na konsoli. Ale tym czasie >charakter dodaje się po echopoleceniu przekierowanie jego wyjście do pliku tekstowego /etc/apt/sources.list.d/ros-latest.list.

Zasadniczo całe to polecenie zapisuje fragment tekstu do pliku tekstowego. Teraz nadchodzi trudna część:

Ciąg zapisany do pliku może być inny dla każdego komputera. Część $(lsb_release -sc)zostaje rozwiązana (zamieniona na coś innego) po uruchomieniu echopolecenia.

Możesz otworzyć /etc/apt/sources.list.d/ros-latest.listw edytorze tekstu przed i po poleceniu, aby zobaczyć zmianę dla siebie. (Plik może nie istnieć przed tym poleceniem.)


źródło
19
W rzeczywistości >zastępuje plik tekstowy, >>dołącza do końca.
reż
3
@dirkt Dzięki. Mój błąd! ;) To konsekwencja nauki kilku języków skryptowych. Konfliktowe zachowanie w końcu cię prześladuje. Nawet w DOS,> zastępuje.
10
echozapisuje na standardowe wyjście, a nie na konsolę.
Michael Hampton
4
„O ile nie nastąpi przekierowanie, standardowym wyjściem jest terminal tekstowy, który zainicjował program.” Tak, echopisze do konsoli.
2

Zarządzanie pakietami i repozytoria oprogramowania

Dystrybucje Linuksa oparte na Debianie opierają się na repozytoriach (bazach pakietów instalacyjnych aplikacji i pakietów aktualizacji) w celu aktualizacji systemów operacyjnych, a także łatwego pobierania i instalowania nowych pakietów oprogramowania. Lokalizacja tych repozytoriów jest przechowywana w katalogu /etc/apt/sources.list, jednak dodatkowe źródła, zwykle unikalne dla określonych aplikacji, mogą być przechowywane w /etc/apt/sources.list.dkatalogu.

Po wykonaniu polecenia aktualizacji indeksu pakietów apt-get updatesystem operacyjny sprawdza w tych repozytoriach pakietów dostępne pakiety i rejestruje dostępne oprogramowanie jako dostępne dla systemu operacyjnego, które można zainstalować za pomocą tradycyjnego apt-get install <package>polecenia.

Przykład jednego z tych źródeł oprogramowania:

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

Ważne jest, aby te źródła odwoływały się do określonych wersji dystrybucji Linuksa. Przykładem jest zaufany, który jest kryptonimem Ubuntu 14.04. Możesz zapytać swój system operacyjny (oparty na Debianie), aby uzyskać szczegółowe informacje za pomocą lsb_release -alub lsb_release -scco oznacza skrót i kryptonim .

W twoim pytaniu część $(lsb_release -sc)jest interpretowana, a wynik z twojego systemu operacyjnego jest drukowany w niestandardowym pliku źródłowym ros-latest.list, który polecenie utworzy po wykonaniu.


Tłumacz języka poleceń

shPolecenia jest Bourne powłoki . Jest to jedna z kilku powłok, ale jest uważana za stary standard i na ogół istnieje taka możliwość. Często występuje także bashw wielu skryptach powłoki. Ta deklaracja określa powłokę, która ma być używana, ponieważ różne powłoki używają innej składni.

W odniesieniu do -cflagi cytuje man bash:

Jeśli dostępna jest opcja -c, polecenia są odczytywane z łańcucha. Jeśli po ciągu znajdują się argumenty, są one przypisywane do parametrów pozycyjnych, zaczynając od 0 $.

Wszystko w tekście ''jest odczytywane jako ciąg znaków, nie musisz wymyślać, jak uciec od różnych znaków cudzysłowu, ani martwić się, że powłoka interpretuje coś w niewłaściwy sposób.


tl; dr

Polecenie drukuje deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) maindo niestandardowego pliku źródłowego, zastępując $(lsb_release -sc)go interpretowaną wartością.

Ralph
źródło