2

これは何を意味するのでしょうか?

  h2t=$((exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) \
            || which html2text || which cat) |tail -n 1)

わかりh2t=...ました、変数を設定していることを意味します。

二重括弧は算術演算用だと思いました。もしそうなら、私はそこに算術を見ていないので、私は完全に困惑しています.

もちろん、そのコード行の上には、意図を説明する 15 行のコメント ブロックがあります。残念ながら、コメントは古代シュメール語の Unicode バージョンであり、解釈できません。

**冗談を言っているだけ!コメントはありません。

補遺: これはhttps://github.com/micha/resty/blob/master/restyからのものです

4

2 に答える 2

2

私の答えへのコメントでtwalbergがそれを見つけました。$()HTML をテキストに変換できるさまざまなツールが利用できるかどうかに応じて、outerはコマンド ラインを割り当てます。

したがってh2tlynx -stdin -dumpコマンドライン、またはそれが失敗した場合 (つまりlynx、利用できない場合)、html2textまたは最後の手段として含まれていますcat。後者の 2 つのコマンドはwhich呼び出しから取得され、前者のコマンドはecho.


HTML を stdin からテキストに変換します。

分けてみましょう。

  • exec 2>&-サブシェルでリダイレクトを設定します (shuts up stderr、IIRC)
  • 次のサブサブシェルは、lynx がインストールされているかどうかを確認し、lynx から入力を取得して実行しstdinます。
  • の後の他の部分は、インストールされているかどうかのみを評価し、実行しないため、あまり意味がありません||html2textcat
  • 次に、その最初のサブシェルから最後の行を取得します

それをスクラッチします。それechoは何もしないので。私にはプロトタイプのように見えます。

読みやすくするために分解します。

$(
    exec 2>&-
      (
        which lynx >/dev/null &&
        echo lynx -stdin -dump
      ) ||
    which html2text ||
    which cat
  ) |
  tail -n 1
)
于 2013-03-11T21:11:44.270 に答える
2

構文を明確にするための正確なルールは覚えていませんが、次のように解析する必要があります。

h2t=$(
       (exec 2>&-; (which lynx >/dev/null && echo lynx -stdin -dump) ||
         which html2text ||
         which cat) |
       tail -n 1
     )

つまり、 にパイプされたサブシェルで構成されるコマンド置換tailです。サブシェルは、コマンドの「スコープ」を提供するために使用されますexec。その後、別のサブシェルが、演算子によって 3 つのコマンドが区切られたリストを開始します||

于 2013-03-11T21:17:41.643 に答える