다음과 같은 간단한 스크립트가 있습니다.
echo "-------------------------- SOA --------------------------------"
echo " "
echo -n " ---------> "; dig soa "$1" +short | awk '{print $3}'
출력은 다음과 같습니다:
-------------------------- SOA --------------------------------
---------> 2019072905
이제 내 질문은 파기 후에 "echo" 명령을 실행할 수 있습니까? 출력은 다음과 같습니다.
-------------------------- SOA -----------------------------
---------> 2019072905 <-------------
비슷한 사례를 찾아보았지만 관련 사례를 찾지 못했습니다.
가능합니까?
미리 감사드립니다.
답변1
cmd=$(dig soa "$1" +short | awk '{print $3}'; echo -n \<----------;)
echo "-------------------------- SOA --------------------------------"
echo " "
echo -n " ---------> ";echo $cmd
답변2
나는 다음과 같은 방법으로 모든 일을 할 것입니다 printf
:
#!/bin/sh
header='-------------------------- SOA --------------------------'
headerLength=$(awk '{print length()}' <<<"$header")
value=$(dig soa "$1" +short | awk '{print $3}')
valueString="-----------> $value <-------------"
valueLength=$(awk '{print length()}' <<<"$valueString")
offset=$(((headerLength + valueLength)/2+1))
printf "%s\n\n%${offset}s\n" "$header" "$valueString"
이는 값의 길이에 관계없이 디스플레이가 항상 중앙에 위치한다는 장점이 있습니다( value=$1
설명을 위해 약간 수정된 버전 사용).
$ foo.sh 2019072905
-------------------------- SOA --------------------------------
-----------> 2019072905 <-------------
$ foo.sh "some random long string"
-------------------------- SOA --------------------------------
-----------> some random long string <-------------
$ foo.sh "foo"
-------------------------- SOA --------------------------
-----------> foo <-------------
답변3
#!/bin/sh
soa=$(dig soa "$1" +short | awk '{print $3}')
cat <<__EOF__
-------------------------- SOA -----------------------------
---------> $soa <-------------
__EOF__
그런데, 내 생각에 이 질문은 잘못된 것 같습니다. 왜냐하면 SOA 주변의 모든 헤더 쓰레기를 인쇄하면 이 스크립트의 출력을 다른 스크립트의 입력으로 사용하기가 더 어려워지기 때문입니다...현재 자신이 그렇게 생각하지 않는 경우에도 필요할 수 있습니다. 앞으로는 이렇게 하려고요. 유닉스에서 출력의 장황함은 "죄"입니다. :) - 스크립트를 작성할 때 출력이 결국 다른 사람(자신을 포함하여)에게 입력될 수 있다는 점을 항상 고려해야 합니다.
나는 그 질문을 무시했을 것이지만 다른 대답은 더 마음에 들지 않습니다. 잘못된 일을 할 예정이라면 올바르게 하는 것이 좋습니다.
답변4
dig가 없으므로 이 예에서는 echo를 사용했습니다.
$ echo '2019072905' | awk '
BEGIN { d=sprintf("%15s",""); gsub(/ /,"-",d); print d d, "SOA", d d ORS }
{ printf "%*s> %s <%s\n", 2*length(d)-length($0)/2+1, d, $0, d }
'
------------------------------ SOA ------------------------------
---------------> 2019072905 <---------------
$ echo '201' | awk '
BEGIN { d=sprintf("%15s",""); gsub(/ /,"-",d); print d d, "SOA", d d ORS }
{ printf "%*s> %s <%s\n", 2*length(d)-length($0)/2+1, d, $0, d }
'
------------------------------ SOA ------------------------------
---------------> 201 <---------------
$ echo '12345672019072905' | awk '
BEGIN { d=sprintf("%15s",""); gsub(/ /,"-",d); print d d, "SOA", d d ORS }
{ printf "%*s> %s <%s\n", 2*length(d)-length($0)/2+1, d, $0, d }
'
------------------------------ SOA ------------------------------
---------------> 12345672019072905 <---------------