"버블"을 유지하면서 cowsay/cowthink의 출력에 줄바꿈을 삽입하는 것이 가능합니까?

"버블"을 유지하면서 cowsay/cowthink의 출력에 줄바꿈을 삽입하는 것이 가능합니까?

나는 하나를 유지인쇄설명서에는 Bash편리한 버전이 있으므로 변경 사항이 있는지 궁금합니다. 특히 업데이트한 패키지를 항상 따르지는 않기 때문에 더욱 그렇습니다. 일반적으로 로컬에는 보유하고 있는 소프트웨어 버전과 관련된 설명서 버전이 있으며 이를 추적할 수 있습니다.다양성용이하게.

일부 소스를 확인하고 요약하기 위해 이것을 만들었습니다.

#!/usr/bin/env bash
## bashmancheck - Check different sources for date of the last updates

header="BASH manual -- Local BASH manual -- BASH repo /doc -- BASH Reference man(www)"
data="$(links -dump 'http://git.savannah.gnu.org/cgit/bash.git/tree/doc/bash.1' | grep -om 1 'Last Change.*' | cut -d ' ' -f 4,6,9) -- $(zcat /usr/share/man/man1/bash.1.gz | grep -om 1 'Last Change.*' | cut -d ' ' -f 4,6,9) -- $(links -dump 'http://git.savannah.gnu.org/cgit/bash.git/log/doc' | grep -Eom 1 '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}') -- $(links -dump 'http://www.gnu.org/software/bash/manual' | grep -om 1 'last updated.*' | cut -d ' ' -f 3-)"

cowthink -W80 -f bud-frogs --  $header $data

온라인 및 로컬 매뉴얼 페이지 소스, Bash 저장소의 /doc 섹션, 마지막으로 온라인 참조 매뉴얼의 특정 문자열을 사용 links하고 살펴봅니다. zcat출력은 다음과 같습니다.

( BASH manual -- Local BASH manual -- BASH repo /doc -- BASH Reference man(www) )
( Feb 2 2014 -- Feb 2 2014 -- 2014-02-26 -- August 22, 2012                     )
 ------------------------------------------------------------------------------- 
     o
      o
          oO)-.                       .-(Oo
         /__  _\                     /_  __\
         \  \(  |     ()~()         |  )/  /
          \__|\ |    (-___-)        | /|__/
          '  '--'    ==`-'==        '--'  '

하지만 다음과 같이 한 줄에 항목과 날짜 쌍이 있으면 좋겠습니다.

BASH manual: Feb 2 2014
Local BASH manual: Feb 2 2014
BASH repo /doc: 2014-02-26
BASH Reference man(www): August 22, 2012

하지만 이를 위해서는 항목과 해당 날짜를 연결한 후 행을 변경해야 하는데 이를 달성할 수 없습니다.cowsay/cowthink. 이것이 내가 스크립트를 이런 식으로 디자인한 이유를 설명합니다. 이 두 변수는 형식 지정에만 도움이 되지만 실행 중에는 아무런 영향을 미치지 않습니다. 공교롭게도 제목과 데이터 변수 모두 너비가 80열 미만이고 명령 출력은 이 목적을 위해 80열로 설정됩니다. 또한 원래 사용했던 날짜 cut대신 한 줄에 표시되는 날짜를 단축 하기도 했습니다 . grep -o서식을 지정하기 위해 일부 문자(이중 대시)를 자유롭게 사용했습니다. 조잡합니다.

줄 바꿈을 사용할 수 있나요시험? 더 좋은 방법이 있나요?

답변1

좋은 거품을 만들기 위해 cowsay는 기본적으로 모든 공백을 잘라냅니다. 이는 줄 바꿈을 의미합니다. 두 개의 개행 문자를 연속해서 전달하면 cowsay가 이를 인쇄합니다.

노력하다

cowsay "lala
lala"

그리고

cowsay "lala

lala"

첫 번째는 lala lala버블에 출력되고 후자는 출력됩니다.

lala

lala

이것은 쉘 관련 동작이 아니며 단지 잘못된 것입니다 :)

마음에 들지 않으면 전환해야 합니다 -n. 단어 줄 바꿈을 완전히 방지하여 임의의 공백 문자를 허용합니다.

안타깝게도 다음 명령은 작동하지 않습니다.

cowsay -n "lala
lala"

-n내 버전에서는 cowsay가 옵션이 제공될 때 메시지를 인수로 전달하는 것을 허용하지 않기 때문입니다 . 하지만

echo "lala
lala" | cowsay -n

매력으로 작용했습니다.

따라서 귀하의 질문에 대해 출력에서 ​​double\n이 마음에 들지 않으면 명령을 다음으로 변경하십시오.

(echo "BASH manual - $(links -dump 'http://git.savannah.gnu.org/cgit/bash.git/tree/doc/bash.1' | grep -om 1 'Last Change.*')"; echo "Local BASH manual - $(zcat /usr/share/man/man1/bash.1.gz | grep -om 1 'Last Change.*')"; echo "BASH repo /doc: $(links -dump 'http://git.savannah.gnu.org/cgit/bash.git/log/doc' | grep -Eom 1 '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}')"; echo "BASH Reference man(www): $(links -dump 'http://www.gnu.org/software/bash/manual' | grep -om 1 'last updated.*')") \
| cowthink -f tux -n

답변2

이것은 Cowsay에게는 문제가 되지 않습니다. 이것이 쉘이 인수의 개행 문자를 처리하는 방법입니다. 개행 문자는 공백처럼 처리됩니다. 이것을 시도해 보십시오 : 개행 문자가 실제로 출력 echo $(ls)되더라도 모든 파일은 한 줄에 출력됩니다 .ls

다행히 표준 입력을 통해 Cowsay에 데이터를 전달할 수 있습니다.

(echo "header line"; links ...; links ...; links...) | \
    cowsay -W80 -f bud-frogs

답변3

답변을 고려한 후 개행 시퀀스를 추가하고 모든 것을 cowthink에 전달하여 원하는 작업을 수행할 수 있었습니다.표준 입력:

#!/usr/bin/env bash
## bashmancheck - Check different sources for date of the last updates

(echo -e "BASH manual - $(links -dump 'http://git.savannah.gnu.org/cgit/bash.git/tree/doc/bash.1' | grep -om 1 'Last Change.*')\n"; echo -e "Local BASH manual - $(zcat /usr/share/man/man1/bash.1.gz | grep -om 1 'Last Change.*')\n"; echo -e "BASH repo /doc: $(links -dump 'http://git.savannah.gnu.org/cgit/bash.git/log/doc' | grep -Eom 1 '[[:digit:]]{4}-[[:digit:]]{2}-[[:digit:]]{2}')\n"; echo -e "BASH Reference man(www): $(links -dump 'http://www.gnu.org/software/bash/manual' | grep -om 1 'last updated.*')") \
| cowthink -W80 -f tux

 ______________________________________________________________ 
( BASH manual - Last Change: Sun Feb 2 16:21:40 EST 2014       )
(                                                              )
( Local BASH manual - Last Change: Sun Feb 2 16:21:40 EST 2014 )
(                                                              )
( BASH repo /doc: 2014-02-26                                   )
(                                                              )
( BASH Reference man(www): last updated August 22, 2012        )
 -------------------------------------------------------------- 
   o
    o
        .--.
       |o_o |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

관련 정보