\r\n\r\n
普段からエディタでHTMLを書き、それをWordPressに貼り付けていると、時々厄介な書式タグ(マークアップなど)が追加されていることに気づくでしょう。簡単なシェルスクリプトを使えば、いくつかの簡単なコマンドで、そのジャンクなHTMLフォーマットを自動的に削除することができます。
なぜシェルスクリプトを使うのか?プログラミングが初めての人は、小さなところから始めるのがよいでしょう。あきらめることが少なくなるだけでなく、立ち止まって学ぶ機会にもなります。とはいえ、最初に作ったプログラムは、たとえそれが非常にシンプルなものであっても、非常に有用なものになるはずです。
シェルスクリプトがコードを書き始めるのに最適な理由は、数行のコードで何かをまとめるのが簡単で、時間を大幅に短縮できることです。ここでは、いくつかのレシピ、つまり「パターン」を紹介し、自分のスクリプトに再調整できるようにします。
まず、「シェルスクリプト」、つまりbashshellで実行されるスクリプトを書くという定義から始めましょう。技術的には、Powershellなどの他のスクリプト言語も「シェルスクリプト」と呼ぶことができますが、そもそもなぜシェルスクリプト、特にBashスクリプトに注目するのでしょうか。
以上のことを踏まえて、数行のコードで組める便利なシェルスクリプトのアイデアを紹介します。Pandoc変換ユーティリティのすでにかなり強力な機能を強化するために、いくつかのスクリプトを構築する予定です。
シェルスクリプトの最も簡単で分かりやすい使い方は、既存のコマンドのショートカットとして使用することです。コマンドライン・プログラムの中には、多数のフラグを持ち、その構文が必ずしも明確でないものがあります。しかし、これらのコマンドの一つを、その複雑なオプションをすべて使って、入力しやすい名前のシェルスクリプトにすることができる。マーカーファイル上でPandocを実行し、テンプレートファイルを使ってODTファイルを作成する次のようなコマンドを考えてみましょう。
pandoc -r markdown -w odt --reference-odt=/path/to/folder/containing/mscript-template.odt -o manuscript.odt manuscript.md
私はMarkdownやascidocのような軽量なマークアップですべてを書いているので、Pandocを毎日使っています。しかし、ODTに変換する際、「参照ODT」ではなく、「ODT参照」と入力してしまいます。シングルス時間です。また、多くのシェルコマンドのように、テンプレートへのパスが自動的に行われることはありません。簡単なスクリプトを作成することで、不正な入力をすべて回避することができます。
#! /bin/bash
pandoc -r docbook -w odt --reference-odt=/path/to/folder/containing/mscript-template.odt -o $1.odt $1
スクリプトの最初の行は、bashshellを使用して実行するようにシステムに指示します。次のものは、コマンドラインの最初の引数 ($1) を受け取り、フラグのセットで Pandoc を実行します。これを行うには、Unix システムで alias コマンドを使用するなど、他の方法があることは知っておくべきです。しかし、**小さなシェルスクリプトは、手近に置いておくことができ(例えば、~/bin フォルダ)、他の場所に素早くコピー(または同期)し、任意のテキストエディターを使って変更することができます。スクリプトを覚えやすく、入力しやすいファイル名で保存します(例:「markdown2odt.sh company」)。実行可能なパーミッションを与えることを忘れないでください。
2つのターミナルコマンドをパイプ("|")文字で結合すると、最初のコマンドの出力が2番目のコマンドの入力として使用されることになります。(初めてご覧になる方は、コマンドラインのクイックガイドをご覧ください)。しかし、2つのコマンドを正しい順序で、正しい引数で入力しなければならないのは、先ほど説明した問題を複雑にするだけです。この二重のコマンドをシェルスクリプトで包むと、より簡単になります。
私がPandocで使っているトリックのひとつに、HTMLフォーマットを「クリーン」にする、つまりインラインスタイルをすべて削除する、というものがあります。ワープロ文書をHTMLに書き出してみると、テキストにスタイル(spanタグ)がたくさん追加されているのを見たことがあるはずです。
Docbook XML形式にはインラインスタイルに関する規約がないため、HTMLをDocbookに変換すると、その書式はすべて破棄されてしまいます。そして、Pandocを使ってDocBookをHTMLに変換すれば、例えばWordPressに貼り付けられるような素敵なマークアップが出来上がります。以下のスクリプトでは、Pandocを個別に呼び出すのではなく、両者をリンクさせています。
#! /bin/bash
pandoc -w docbook $1 | pandoc -r docbook -w html -o $1 -。
その理由は、Pandocに他の出力(例えば、ファイル)を与えていないからです。を使用します。そこで、唯一のバックアップとして、標準出力(この場合はターミナル)を使用します。
一方、2つ目のPandocコマンドの末尾にあるダッシュは、「標準入力」を使用することを意味しています。単独で実行した場合、プロンプトが表示され、シェルはキーボードからデフォルトの入力で何かテキストを入力するのを待ちます。これらを組み合わせると、最初のコマンドがXMLの束をターミナルに出力し、すぐに2番目のコマンドを入力としてパイプインすることがほぼ想像できます。
その結果、「clean-html.shファイル」と名前を変えれば、どんなHTMLファイルでも実行でき、煩わしいスタイルを取り除くことができるのです。Pandocはファイルから読み込んで、最後に上書きするので、一時ファイルがばらばらにならないのが良いところです。
プログラムによっては、コマンドラインでアスタリスクなどのワイルドカードを指定することができます。例えば、この場合、すべてのJPG画像を「ピクチャ」フォルダに移動させることができます。
mv *.jpg ~/Pictures
しかし、一度に1つのファイルしか入力として受け付けないプログラムもあり、Pandocはその1つです。では、エクスポートされたHTMLファイルがディレクトリいっぱいにあって、HTMLフォーマットをクリーンアップしたい場合はどうすればいいのでしょうか?-html.shファイルを "クリーニング "して、各スクリプトを手動で記述する必要があるのでしょうか?
いいえ、私たちは新参者ではありませんから。パイプコマンドを "for each "ループでくくることができる。これは、カレントディレクトリの各HTMLファイルに順番にアクセスして、そのファイルに対してクリーンオペレーションを実行するものです。また、すべてのファイルが処理されたことを知らせるために、echoステートメントでメッセージを追加することもできます。
for filename in ./*.html
為さる
pandoc -w docbook $1 | pandoc -r docbook -w html -o $1 -。
echo "1ドルで作業中...HTMLはきれいです!"
ダン
このスクリプトを実行すると、非常にきれいなHTML書式が完成します。
シェルスクリプトは、常に微調整が可能なため、いじり好きな人にはお勧めです。これらのパターンを他のスクリプトのベースとして使用する方法として、以下のようなアイデアがあります。
このように、シェルスクリプトを使えば、少しずつ構築し、プロンプトでテストし、実行時にスクリプトに修正することができるのです。
どうです、シェルスクリプトがそれほど怖くなくなったでしょう?面倒な作業を自動化する準備はできましたか?参加される方は、下のコメント欄でお知らせください。