$ lsb_release -c
Codename: trusty
$ cat /etc/issue
Ubuntu 14.04 LTS \n \l
$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04 LTS"
Dane wyjściowe powyższych poleceń pokazują tylko częściową nazwę kodową (tj trusty
.). Jak uzyskać pełną kryptonim ( zaufany tahr ) mojego zainstalowanego systemu Ubuntu?
command-line
release-management
Avinash Raj
źródło
źródło
/etc/os-release
. Może powinieneś sprecyzować, co masz na myśli? Jak uzyskać pełną kryptonim (zaufany tahr) mojego zainstalowanego systemu Ubuntu? . Czy chcesz echo tylko na terminalu, czy potrzebujesz przypisania do zmiennej? Czy będzie to stosowane w niektórych systemach innych niż {Ubuntu, Debian}?Odpowiedzi:
Bez użycia narzędzi zewnętrznych:
Możesz po prostu źródło (polecenie źródła to kropka
.
)/etc/os-release
i będziesz mieć dostęp do wszystkich zdefiniowanych tam zmiennych:Edytować. Jeśli chcesz usunąć
14.04,
część (jak poprosił terdon), możesz:Zauważ, że jest to nieco niezręczne, ponieważ w innych dystrybucjach
VERSION
pole może mieć inny format. Na przykład na moim debianieNastępnie możesz sobie wyobrazić coś takiego (w skrypcie):
źródło
. /etc/os-release && echo ${VERSION//[0-9,. ]/ }
:?;D
.Mój wariant tego, co już jest oferowane:
Najkrótsza, najstraszniejsza jak dotąd odpowiedź.
Jeśli nie chcesz ładować
/etc/os-release
zawartości do obecnego środowiska, możesz udawać, że bash myśli, że ładuje skrypt dość łatwo:źródło
:D
.( . /etc/os-release && echo ${VERSION/*, /} )
.Grep:
Wyjaśnienie:
lsb_release -rs
-> Drukuje zainstalowaną wersję Ubuntu.grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info
-> Złap wszystkie linie, które zawierają twoją wersję wydania, w moim przypadku jest to 14.04.grep -m 1 "Description: Ubuntu "
-> Ponownie pobiera tylko dopasowany pierwszy wiersz (z powodu-m
flagi), który zawiera ciągDescription: Ubuntu
.cut -d "'" -f2
-> drukuje pole numer 2 zgodnie z pojedynczym cudzysłowiem'
Awk:
Wyjaśnienie:
Zadeklarowanie i przypisanie zmiennej w awk odbywa się za pomocą
-v
parametru, więc wartośćlsb_release -rs
polecenia jest przypisana do zmiennej,var
której inturn pomaga wydrukować pole 4, pole 5 z wierszy zawiera ciąg znaków14.04
i istnieje, jeśli znaleziono jedno. Na konieccut
polecenie pomaga usuń pojedyncze cudzysłowy.źródło
Polecenie, którego szukasz, to:
Jest to bardzo brzydkie i niezoptymalizowane. Jestem pewien, że powinna istnieć łatwiejsza metoda, która ma pewne problemy.
źródło
źródło
Oto kilka innych możliwości. Wszystkie parsują
/etc/os-release
plik, który na moim 13.10 wygląda następująco:Wszystkie poniższe rozwiązania przeanalizują drugą linię do wyprodukowania
Saucy Salamander
.grep
Te
-o
środki „wydrukować tylko część dopasowanie linii”, a-P
umożliwia pcre. To pozwala nam korzystać\K
która usuwa co zostało dopasowane do tego punktu, co w połączeniu ze-o
środkami „drukować tylko to, co pasuje po\K
. Więc rzeczywiste wyrażenie regularne używane dopasuje dwa ostatnie słowa wiersza, który zawieraVERSION=
.awk
Ustawienie separatora pól na
"
ispace
oznacza, że pola 3d i 4 wiersza zawierającego wierszVERSION=
są ciągiem, którego szukamy.sed
Na
-n
normalne wyjście sterujące tłumi żadne linie zostaną wydrukowane.-r
Pozwala rozszerzyć wyrażeń regularnych. Następnie w pasujących liniachVERSION=
usuniemy wszystko oprócz dwóch ostatnich słów. Nap
końcu oznacza druk.perl
Przez
-n
proces każda linia wejściowa ze skryptem dany za pomocą”-e
”. Na-l
dodaje znak nowej linii na każde wezwanie druku (i kilka innych rzeczy, które nie jest relevevant tutaj). Wyrażenie regularne mecze dwa ostatnie słowa (\b
jest granica słowo) i wypisuje je, jeśli linia zawieraVERSION=
.coreutils
Tutaj, po prostu
grep
odpowiednią linię i używamycut
ustawienia separatora pól naspace
(-d ' '
) i drukowania wszystkiego od drugiego pola do końca linii.tr -d
Polecenie usunąć"
od końca.Czysta skorupa (bezwstydnie kradnie sprytny
source
pomysł @ gniourf_gniourf ):Te
.
źródła plik, który sprawia, że zmienne dostępne do powłoki i używam Bash za możliwościami manipulacji ciąg usunąć numery wersji.źródło
Używając wyrażenia regularnego możesz to zrobić:
Wyjaśnienie:
Przeszukuje linię z
VERSION
pliku/etc/os-release
. Następnie znajduje 2 kolejne słowa oddzielone spacją (wyrażenie regularne Perl). Flaga -o zachowuje tylko to, co pasuje do wyszukiwania.Musisz użyć
[a-zA-Z]
zamiast „w”, aby uniknąć włączenia cyfr.źródło