複数のLESSOPENスクリプトをリンクする方法は?

複数のLESSOPENスクリプトをリンクする方法は?

今日のLinuxディストリビューションには、ユーザーが圧縮ファイルやPDFファイルなどを簡単にスキャンできるデフォルトLESSOPEN設定があります。/usr/bin/lesspipe

ここで、Lessに構文強調を追加できることを確認したいと思います。これは簡単です。強調されたソース。私はそれを使用し、LESSOPEN="| /usr/bin/source-highlight -i %s -q -f esc"素晴らしい動作します。

しかし、今の質問は次のようになります。 lesspipeとsource-highlightの動作をどのように取得できますか?単に1つずつ追加することは機能しません。

$ export LESSOPEN="| /usr/bin/lesspipe %s | /usr/bin/source-highlight -i %s -q -f esc"
$ less foo
Invalid LESSOPEN variable

それも言えないからあまり驚くこともない。

複雑なスクリプトを書かなくても設定できますか?最良のシナリオは、接続を行うことです。つまり、圧縮ファイルに構文強調表示を提供することです。

答え1

初期パイプの後ろの変数のコマンドは、LESSOPEN環境変数が表すシェルによって実行され、SHELL標準出力に必要なコンテンツを生成する必要があります。

lesspipe標準入力から読み出し、標準出力に書き込む他のコマンドに入力として出力を渡すことができます。ただし、標準入力で読み取るには、source-highlight強調表示する言語を教える必要があるため、source-highlightこの方法は機能しません。

lesspipeファイル形式が認識されないと何も印刷されないため、元のファイルを読むという意味で解釈されにくいです。お持ちの場合ifne~からJoey Hessのmoreutils、これを使用してこれらの状況を検出し、代替をsource-highlight試すことができます。元のファイル名を変数に保存する必要がある場合は、2回使用できます。

LESSOPEN='|file=%s; /usr/bin/lesspipe "$file" | /usr/bin/ifne -n /usr/bin/source-highlight -i "$file" -o STDOUT 2>/dev/null'

-r色があまり頻繁にレンダリングされないようにするには、開始後にまたはを入力する必要があります。-R$LESS-r-Rless

関連情報