이 명령을 실행하면:
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"
}