
私は/etc/os-releaseを探していて、出力を変数に保存したいと思います。変数を必要としない条件付きスクリプトを作成しましたが、今は変数が必要です。
[[ ${$(grep ID_LIKE /etc/os-release)#*=} == 'arch' ]] && echo this || echo something
出力
grep ID_LIKE /etc/os-release
こんな感じ
ID_LIKE=arch
等号の後に来るものを手に入れたいです。最も効率的な方法は何ですか?
よろしくお願いします。
答え1
os-release
Ubuntuのマニュアル()によると、man os-release
ファイル形式はシェルスクリプトを介して安全に取得する必要があります。ソースファイルを取得した後、いくつかのシェル変数が生成され、そのうちの1つの値を知りたいです。/etc/os-release
/usr/lib/os-release
シェルスクリプトでは、次のことができます。
unset ID_LIKE
[ -f /usr/lib/os-release ] && . /usr/lib/os-release
[ -f /etc/os-release ] && . /etc/os-release
if [ -n "$ID_LIKE" ]; then
printf 'The ID_LIKE variable has the value "%s"\n' "$ID_LIKE"
else
echo 'The ID_LIKE variable is empty, or not set' >&2
fi
os-release
/usr/lib
その後、にファイルをインポートしようとします/etc
。項目の1つはその中で言及されている/etc
ものよりも優先されなければならないので、/usr/lib
最後に取得します。
次にシェル変数の値を印刷しますID_LIKE
。
まずID_LIKE
、変数の消去を追加し、unset
変数の値を手動で確認して、2つのファイルのうちの1つが実際に変数を設定していないインスタンスを検出しました。
これらのアドインがない場合、コードは次のようになります。
[ -f /usr/lib/os-release ] && . /usr/lib/os-release
[ -f /etc/os-release ] && . /etc/os-release
printf 'The ID_LIKE variable has the value "%s"\n' "$ID_LIKE"
答え2
var=$(grep ID_LIKE /etc/os-release)
var=${var#*=}
echo "$var"
Debian