書式設定スクリプトのawkコマンド出力

書式設定スクリプトのawkコマンド出力

このコマンドを実行すると:

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"
}

関連情報