기본적으로 bash에는 내 컴퓨터에 정보를 요청하는 명령이 많이 있습니다.
좋다:
> host=$(hostname -A)
hostname=$(hostname -I)
Pub_IP=$(dig +short
myip.opendns.com @resolver1.opendns.com)
Kernel_Version=$(uname -v | awk -F"Debian" '{print $2}' | cut -d ' ' -f2 | cut -d '-' -f1)
Deb_Version=$(cat /etc/debian_version)
나도 동의한다
echo $host $hostname $Pub_IP $Kernel_Version $Deb_Version > info.txt
각 매개변수 사이에 어떻게 넣을지 알아내야 합니다 |
. 따라서 내 info.txt 파일을 보면 다음과 같습니다.
| debianmachine | output_of_hostname | output_of_Pub_IP |
그리고 인쇄로도 할 수 있나요?
답변1
문자열을 인용하거나 이스케이프하면 파이프를 포함할 수 있습니다.
echo "| ${host} | ${hostname} ..."
물론 다음 printf
을 사용할 수도 있습니다. (질문 끝 부분에서 요청한 내용이라고 생각합니다.)
printf '| %s | %s | %s ...' "${host}" "${hostname}" "${Pub_IP}" ...
반복 동작을 활용하여 printf
형식 문자열을 단순화할 수 있습니다.
printf '| %s ' "${host}" "${hostname}" "${Pub_IP}" ...; printf '|\n'
그러면 | %s
필요한 만큼 시퀀스가 반복되어 파이프와 캐리지 리턴으로 줄이 끝납니다.
답변2
사용 printf
:
printf '| %s | %s | %s | %s | %s |\n' "$host" "$hostname" "$Pub_IP" "$Kernel_Version" "$Deb_Version" >info.txt
%s
( 형식 string 의 첫 번째 인수 printf
)는 문자열 자리 표시자이며, 각 인수는 printf
차례로 제공된 다른 인수로 대체됩니다.printf
답변3
한 가지 아이디어는 모든 변수를 배열에 저장하고 필요한 수정 사항을 적용하여 루프에서 인쇄하는 것입니다.
그러나 쉘의 문자열 연결이 더 효율적이고 간단하다고 생각합니다. 예를 들면 다음과 같습니다.
echo "| $host | $hostname | $Pub_IP | $Kernel_Version | $Deb_Version |" > info.txt
또 다른 접근 방식은 간단한 awk 루프를 사용하여 프로그래밍 방식으로 파일의 내용을 생성하는 것입니다. 예를 들면 다음과 같습니다.
awk '{print "|"\
for (i=1 ; i <= NF ; i++) \
print " ", $i, " |"}' \
info.txt | xargs -11 > info.txt