「バブル」を維持しながら、カウセー/カウシンクの出力に改行を挿入することは可能ですか?

「バブル」を維持しながら、カウセー/カウシンクの出力に改行を挿入することは可能ですか?

私は一つを維持印刷マニュアルには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
         /__  _\                     /_  __\
         \  \(  |     ()~()         |  )/  /
          \__|\ |    (-___-)        | /|__/
          '  '--'    ==`-'==        '--'  '

しかし、次のように1行に項目と日付のペアがあると思います。

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。これが私がスクリプトをこのように設計した理由を説明します。これら2つの変数は書式設定にのみ役立ちますが、実行中は何の影響もありません。結局のところ、タイトルとデータ変数の両方の幅は80列未満であり、コマンド出力はこの目的のために80列に設定されています。また、元々使用していた日付のcut代わりに、1行に表示される日付を短縮したりもしました。grep -o書式を設定するためにいくつかの文字(二重ダッシュ)を自由に使用しました。粗雑です。

改行を使用できますか?テスト?もっと良い方法がありますか?

答え1

良い泡を作るために、カウセーは基本的にすべての空白を切り取ります。これは改行を意味します。 2つの改行文字を連続して渡すと、カウセーはそれを印刷します。

努力する

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)も、すべてのファイルは1行に出力されます。ls

幸いなことに、標準入力を介してCowsayにデータを渡すことができます。

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

答え3

答えを考慮した後、改行シーケンスを追加し、すべてをカウシンクに渡すことで、必要なことをすることができました。標準入力:

#!/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 |
       |:_/ |
      //   \ \
     (|     | )
    /'\_   _/`\
    \___)=(___/

関連情報