2017-01-17 10 views
0

Distro名を引用符なしで取得しようとしています。サブシェルでのBashの悪い置換

cat /etc/*-release | grep "NAME=.*" -o | cut -d "=" -f2 | head -n1

戻り値:今 "CentOS Linux"

は、シェルの置換を使用して、私は二重引用符を削除しようとした私は、サブシェルでコマンドを配置マーク:

echo ${$(cat /etc/*-release | grep "NAME=.*" -o | cut -d "=" -f2 | head -n1)/\"} 

私が考えていました私は\"を使用して引用符をエスケープし、最後に/を省略して引用符を単に削除することができます。

編集: これはawkで行うことができますが、わかりません。

EDIT:cat /etc/*-releaseの 出力:

CentOS Linux release 7.2.1511 (Core) 
NAME="CentOS Linux" 
VERSION="7 (Core)" 
ID="centos" 
ID_LIKE="rhel fedora" 
VERSION_ID="7" 
PRETTY_NAME="CentOS Linux 7 (Core)" 
ANSI_COLOR="0;31" 
CPE_NAME="cpe:/o:centos:centos:7" 
HOME_URL="https://www.centos.org/" 
BUG_REPORT_URL="https://bugs.centos.org/" 

CENTOS_MANTISBT_PROJECT="CentOS-7" 
CENTOS_MANTISBT_PROJECT_VERSION="7" 
REDHAT_SUPPORT_PRODUCT="centos" 
REDHAT_SUPPORT_PRODUCT_VERSION="7" 

CentOS Linux release 7.2.1511 (Core) 
CentOS Linux release 7.2.1511 (Core) 

予想される出力:CentOSのLinuxの

+0

@Inianサンプルファイルはありません。これらは '/ etc /'の下にあるファイルです。 DebianとCentOS上で少なくとも – rhillhouse

答えて

1

awkを使用して、NAME変数以下のOS名を取得します。

awk -F"=" '$1=="NAME"{gsub(/"/, "", $2);print $2; exit}' /etc/os-release 
CentOS Linux 
2

/etc/os-releaseは、シェルの代入文の簡単なセットであるように思われます。あなた単純に(潜在的に現在のシェル内の任意の変数を上書きしないようにサブシェルを使用して)それと出力$NAMEの値をソースかもしれません:

(. /etc/os-release; echo "$NAME") 

これはその信頼のあなたのレベルに応じて、セキュリティ上のリスクがあるかもしれません/etc/os-releaseには、何らかの理由で他の実行可能コードを含めることができます。

実際のニーズに応じて、単純な文字列として必要な情報を含む/etc/centos-releaseを単に使用することもできます。 (もちろん、あなたのスクリプトはCentOSのボックス上で実行されることを想定していない可能性があります。os-releaseは、より多くのディストリビューションに依存しないバージョンのように見えます。)

+1

ファイルが変更されるかもしれないならば、 '(。$(grep -l"^NAME = "/ etc/* ease); echo" $ NAME ")' '^ NAME ='。 – fedorqui

0

あなたのソリューションはほとんど動作します。 "CentOS Linux"の引用符は、リリースファイルの一部であり、サブシェルを使用すると助けにはなりません。あなたは、区切り文字として二重引用符でcutを使用することができます。

cat /etc/*-release | grep "NAME=.*" -o | cut -d "=" -f2 | head -n1 | cut -d '"' -f2 

あなたは

sed -n '/^NAME=/ {s/NAME="\(.*\)".*/\1/p;q}' /etc/*-release 

説明でsedを使用して同じ操作を行うことができますを探して、唯一pとを求めた印刷行にsedを知らせますNAME=で始まる行は、引用符の間の部分と一致し、最初の行の後には、NAME=で終了します。

関連する問題