パイプラインを使用した複数行のbashコマンドで、別々の行に読みやすいコメントがありますか?


14

パイプラインを使用してシェルスクリプトを作成し、バックスラッシュを使用して行を継続する場合、堅牢で読みやすく、移植可能な方法でコメントを別の行に挿入したいと思います。

たとえば、次のコメントなしの複数行コマンド(わかりやすくするために@DigitalRossから盗まれました)を考えます。

echo abc |
     tr a-z A-Z |
     sort |
     uniq

...以下は私が達成したいものに審美的に最も近いものですが、明白な理由で機能しません...そしてはい、これは通常コメントする価値のあるものではないことをよく知っています:

# Perform critical system task.
# NOTE - An example of what does *not* work.
echo abc |
    # Convert lowercase to uppercase.
     tr a-z A-Z |

     # Sort the results.
     sort |

     # Only show unique lines.
     uniq

次のように、既存の関連する回答は、私にとって不満のようです。

まず、glenn jackmanの答え(配列に引数を追加してから配列を実行する)は、単一のコマンドでは機能しますが、パイプラインでは機能しません(そして、それができたとしても、避けたい複雑さを追加します)。

第二に、ここでの@Gillesの回答(を使用:)は、パイプラインの流れを変更するため、パイプライン処理では機能しないようです。

$ echo "abc" | :
$

:出力を変更せずに渡すものと同等のものがあれば、それは見た目は許容できますが、見つけられませんでした。カスタムのものを書くことはできますが、移植性が低下します。)

最後に、DigitalRossのStackOverflowに対する答えの最後の部分は、同じ行にコメントを追加するのにうまく機能しますが、別の行にコメントを追加することを強くお勧めします。それ以外の場合、行の長さが大きく異なると、読みやすさが低下します。

echo abc |         # normal comment OK here`
     /usr/local/bin/really/long/path/ridiculously-long-filename.sh |  # another normal comment OK here
     sort |        # the pipelines are automatically continued
     uniq          # final comment

読みやすさを維持し、複雑さを最小限に抑える答えを探しています。または、探しているものが実行不可能である理由の背景を探しています。


1
コメントについてのメモ:セクションまたは作業単位を説明するコメントを書くように教えられました。経験豊富なコーダーが何をしているのかを説明するインテリジェントなコメントを書いている場合、スクリプトのメンテナンスに携わっている人は、使用の詳細がわからない場合は常にマニュアルページを使用できます。のようなコメントを書かないでくださいi++; // increment i by one。私はあなたが読むことをお勧め「スタイルのプログラミングの要素」
BSDを

最後の編集を削除すると思います。質問が質問、回答の反論、および回答自体を含むことはめったにありませんが、他の回答が機能しない理由を説明する部分は、ここでは必要です。rozcietrzewiaczの答えとあなたのコメントが一緒に問題を説明します(個人的には別の答えを投稿し、彼が説明したものとはかなり異なっていたので受け入れましたが、これはうまくいきます)
マイケルMrozek

わかりました-フィードバックをありがとう; 学んだ教訓!
ロイスウィリアムズ

回答:


14

これはどう?

echo abc | \
# Convert lowercase to uppercase.
tr a-z A-Z | \

# Sort the results.
sort | \

# Only show unique lines.
uniq

(これらの行の最後の文字としてバックスラッシュを使用する必要があります。)そのアプローチの移植性についてはわかりませんが、currentで機能することは確かbashです。


あぁ!(facepalm)気付かないうちに質問を投稿するときに実際に使っていたイディオムを変えました!パイプを各行の先頭に配置していましたが、bashとshの両方で、到達できるすべてのシステムでこの方法がうまく機能することがわかったので、これをやめさせていただきます。ありがとう!
ロイスウィリアムズ

これらのコメントは行の継続を台無しにしませんか?
スチュアートP.ベントレー

各コメントの前に空行がある限り、正常に機能します。
ロイスウィリアムズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.