Bash의 특정 단어 에코

Bash의 특정 단어 에코

기본적으로 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

관련 정보