web-dev-qa-db-ja.com

「バブル」を維持しながら、cowsay / cow thinkの出力に新しい行を挿入することは可能ですか?

printed バージョンの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

linkszcatを使用して、オンラインおよびローカルのマンページソース、Bashリポジトリの/ docセクション、最後にオンラインリファレンスマニュアルの特定の文字列を確認します。そして、出力は次のようになります。

( 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を使用して、grep -o私が最初にやっていたように。書式設定には任意にいくつかの文字(二重ダッシュ)を使用しましたが、これは大雑把です。

cowsay のような改行を使用できますか?これを行う(より良い)方法はありますか?

3
user44370

これはcowsayの問題ではありません。これは、シェルがパラメーターの改行を処理する方法です。それらは他の空白のように扱われます。 echo $(ls)を試してみてください:lsは改行を出力しますが、すべてのファイルは1行で出力されます。

幸い、stdinを介してcowsayにデータを渡すことができます。

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

ニースバブルを作成するために、cowsayはデフォルトですべての空白をトリミングします。これは改行を意味します。 2つの改行を続けて渡すと、cowsayは両方を印刷します。

試してみてください

cowsay "lala
lala"

vs.

cowsay "lala

lala"

前者はバブルでlala lalaを出力し、後者は出力します

lala

lala

これはシェル関連の動作ではなく、単なるカウセイです:)

これが気に入らない場合は、-nスイッチが必要です。 Wordの折り返しを完全に防ぐため、任意の空白文字を使用できます。

残念ながら、次のコマンドは例外として機能しません。

cowsay -n "lala
lala"

私のバージョンでは、-nオプションが指定されている間、cowsayは引数としてメッセージを渡すことを許可していません。だが

echo "lala
lala" | cowsay -n

チャームとして機能します。

したがって、問題が発生した場合、出力の二重\ 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
3
Phil

答えを検討した後、改行シーケンスを追加し、すべてをcowthinkのstdinに渡すことで、最初にやりたいことを実行できました。

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