(Linux)xargsで障害物を乗り越える

1-6.パイプ・フィルタ

ドラマ『とげ 小市民 倉永晴之の逆襲』(2016) (田辺誠一)
市民相談口に務める倉永晴之がひどい目にあいます。本当大変そう。役所はたらい回し体質で本来責任を取らないといけない部署は、相談室に押し付けるし。相談室のメンバーも責任感が見えない。ただ一人、倉永晴之だけが、市民のことを考えて動いているのですが、運が悪いのか、職場でも家庭でも本当につらそう。真面目に生きてる人の人生ってこんなもんなんですかね。普通に走れず、いろんな障害物が絶えずやってきます。ただ、タイトルに逆襲という言葉が入っているので、そのうちスカっとする倉永晴之の快進撃が始まるんじゃないかと期待して見ています(小出しにはスカっとすることはありますが、もっとすごい逆襲を期待)

今回は、コマンドラインの障害物について考えてみましょう。私が考えるコマンドラインの障害物とは、標準入力が使えない設計のコマンドたちでしょう。たとえばechoコマンド。標準入力使えませんね。

echo HELLO | echo

こんなことはできないわけです。もう、これは、パイプ処理のハードル(障害物)です。しかし、他のコマンドの力を借りて、これを乗り越えることができます。

echo HELLO | xargs echo

みんな大好きxargs。コマンドラインのパイプをスムーズにする、すごいコマンドですね。当然xargsを使わずとも、$()もしくは、“を使うこともできます。しかしxargsを使って左から右へスムーズにコマンドラインを構成できることが素晴らしいと思うんです。

以下のコマンドは、xargsで幾度となく障害物を乗り越えて、バナー表示へゴールする例です。コマンド全体は冗長ではありますが、パイプテクニックが要所要所に見えるかと思います。

takk@deb83:~$ echo -n AZ | od -td1 -An | xargs seq | xargs printf '\\\\'"x%x" | xargs echo -e | fold -s10 | xargs banner
   #    ######   #####  ######  ####### #######  #####  #     #   ###         #
  # #   #     # #     # #     # #       #       #     # #     #    #          #
 #   #  #     # #       #     # #       #       #       #     #    #          #
#     # ######  #       #     # #####   #####   #  #### #######    #          #
####### #     # #       #     # #       #       #     # #     #    #    #     #
#     # #     # #     # #     # #       #       #     # #     #    #    #     #
#     # ######   #####  ######  ####### #        #####  #     #   ###    #####

#    #  #       #     # #     # ####### ######   #####  ######   #####  #######
#   #   #       ##   ## ##    # #     # #     # #     # #     # #     #    #
#  #    #       # # # # # #   # #     # #     # #     # #     # #          #
###     #       #  #  # #  #  # #     # ######  #     # ######   #####     #
#  #    #       #     # #   # # #     # #       #   # # #   #         #    #
#   #   #       #     # #    ## #     # #       #    #  #    #  #     #    #
#    #  ####### #     # #     # ####### #        #### # #     #  #####     #

#     # #     # #     # #     # #     # #######
#     # #     # #  #  #  #   #   #   #       #
#     # #     # #  #  #   # #     # #       #
#     # #     # #  #  #    #       #       #
#     #  #   #  #  #  #   # #      #      #
#     #   # #   #  #  #  #   #     #     #
 #####     #     ## ##  #     #    #    #######

takk@deb83:~$ 

コメント

タイトルとURLをコピーしました