$ 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"
上記のコマンドの出力には、部分的なコード名(つまり、trusty
)のみが表示されます。インストールされているUbuntuシステムの完全なコードネーム(trusty tahr)を取得するにはどうすればよいですか?
外部ツールを使用しない:
source(sourceコマンドはドット.
)/etc/os-release
だけで、すべてにアクセスできますそこで定義されている変数:
$ . /etc/os-release
$ echo "$VERSION"
14.04, Trusty Tahr
編集14.04,
部分を削除したい場合(terdonの質問どおり)、次のことができます。
$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
Trusty Tahr
他のディストリビューションではVERSION
フィールドの形式が異なる可能性があるため、これは少し不格好です。たとえば、私のdebianでは、
$ . /etc/os-release
$ read _ UBUNTU_VERSION_NAME <<< "$VERSION"
$ echo "$UBUNTU_VERSION_NAME"
(wheezy)
次に、(スクリプトで)次のようなものを想像できます。
#!/bin/bash
if [[ -r /etc/os-release ]]; then
. /etc/os-release
if [[ $ID = ubuntu ]]; then
read _ UBUNTU_VERSION_NAME <<< "$VERSION"
echo "Running Ubuntu $UBUNTU_VERSION_NAME"
else
echo "Not running an Ubuntu distribution. ID=$ID, VERSION=$VERSION"
fi
else
echo "Not running a distribution with /etc/os-release available"
fi
既に提供されているものの私のバリアント:
. /etc/os-release; echo ${VERSION/*, /}
これまでで最も短い、最も簡単な答え。
/etc/os-release
のコンテンツを現在の環境にロードする必要がない場合は、bashを偽装して、スクリプトをかなり簡単にロードしていると考えることができます。
bash <(cat /etc/os-release; echo 'echo ${VERSION/*, /}')
$ grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info | grep -m 1 "Description: Ubuntu " | cut -d "'" -f2
Trusty Tahr
lsb_release -rs
->インストールされているUbuntuバージョンを出力します。
grep $(lsb_release -rs) /usr/share/python-apt/templates/Ubuntu.info
->リリースバージョンを含むすべての行を取得します。私の場合は14.04です。
grep -m 1 "Description: Ubuntu "
->再度、文字列-m
を含む一致する最初の行(Description: Ubuntu
フラグのため)のみを取得します。
cut -d "'" -f2
->区切り文字の単一引用符に従ってフィールド番号2を出力します'
$ awk -v var=$(lsb_release -rs) '$3~var {print $4" "$5;exit;}' /usr/share/python-apt/templates/Ubuntu.info | cut -d"'" -f2
Trusty Tahr
Awkでの変数の宣言と割り当ては、-v
パラメーターを介して行われます。したがって、lsb_release -rs
コマンドの値は、変数var
に割り当てられます。文字列14.04
と、見つかった場合に存在します。最後にcut
コマンドは、単一引用符を削除するのに役立ちます。
探しているコマンドは次のとおりです。
grep -oP '(?<=VERSION\=\"(\d\d)\.(\d\d)\,\ )(.*?)(?="$)' /etc/os-release
これは非常にいであり、最適化されていません。もっと簡単な方法があるはずだし、これにはいくつかの問題があります。
正規表現を使用すると、これを行うことができます:
grep 'VERSION' /etc/os-release | grep -oP "[a-zA-Z]+ [a-zA-Z]+"
これは、ファイル/etc/os-release
でVERSION
を含む行を検索します。次に、スペースで区切られた2つの連続した単語を見つけます(Perl正規表現)。 -oフラグは、検索に一致するもののみを保持します。
数字が含まれないようにするには、 `w`の代わりに[a-zA-Z]
を使用する必要があります。
. /etc/os-release
echo $VERSION