このコマンドを実行すると:
awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
端末で以下を検索できます。
NAME : Debian GNU/Linux
VERSION : 8 (jessie)
(形式/間隔参照) ただし、この関数と同様に、このコマンドをローカル変数に割り当てて呼び出そうとすると、次のようになります。
#!/bin/bash
#### Display header message ####
# $1 - message
function write_header(){
local h="$@"
echo "------------------------------"
echo " ${h}"
echo "------------------------------"
}
#### Get info about Operating System ####
function os_info(){
local namevers=$(awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release)
write_header "System Info"
echo "Operating System : $(uname --kernel-name)"
echo "Kernel Version : $(uname --kernel-release)"
echo $namevers
}
os_info
私の形式が壊れています(NAME以降の出力を参照)。
------------------------------
System Info
------------------------------
Operating System : Linux
Kernel Version : 3.16.0-4-amd64
NAME : Debian GNU/Linux VERSION : 8 (jessie)
次のようにローカル変数を削除し、別の行でawkを呼び出して型エラーを解決できました。
awk -F'[="]+' '/^(NAME)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
awk -F'[="]+' '/^(VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
しかし、これは少し暗く見え、私が書いているより大きなスクリプトの構造には合いません。この問題を解決する方法に関する提案はありますか?
LSB module
注:このスクリプトをテストしている一部のコンピュータにパッケージがインストールされていないため、このスクリプトは使用できません。また、高い権限なしで実行する必要があります。
答え1
ああ、スクリプトで問題を確認しました。
変数はここで分割されます。
echo $namevers
この問題を解決するには、次の手順を実行します。
printf '%s\n' "$namevers"
出力は次のとおりです。
------------------------------
System Info
------------------------------
Operating System : Linux
Kernel Version : 3.16.0-4-amd64
NAME : Debian GNU/Linux
VERSION : 8 (jessie)
答え2
私が正しく理解したなら、あなたが望む結果が出るでしょう。
function os_info(){
write_header "System Info"
echo "Operating System : $(uname --kernel-name)"
echo "Kernel Version : $(uname --kernel-release)"
awk -F'[="]+' '/^(NAME|VERSION)=/{printf("%-17s: %s\n",$1,$2)}' /etc/os-release
}
変数を実際に使用するには、型を保持するために変数を引用する必要があります。
echo "${namevers}"
答え3
awk
この回答はカンフーに関するあなたの質問に直接答えることはできませんが、source
すぐに/etc/os-release
変数を使用することもできます。
function os_info() {
. /etc/os-release
write_header "System Info"
echo "Operating System : $(uname --kernel-name)"
echo "Kernel Version : $(uname --kernel-release)"
echo "NAME : $NAME"
echo "VERSION : $VERSION"
}