
私のFreeBSD 13.2システムでは、ユーティリティは圧縮されていないテキストファイルまたはzless
圧縮されたテキストファイルの表示に失敗し、そのファイルがバイナリである可能性があるという警告を表示し、コンテンツを表示したい場合はゴミを表示します。奇妙なことに、使用または動作しているようです。gzip
compress
zmore
gunzip -c
$ zless znapzend.log.1.gz
"znapzend.log.1.gz" may be a binary file. See it anyway?
(バイナリデータを端末に送信するには、「はい」と答えてください。)
$ zless --version
less 608 (POSIX regular expressions)
Copyright (C) 1984-2022 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Home page: https://greenwoodsoftware.com/less
$ zmore --version
less 608 (POSIX regular expressions)
Copyright (C) 1984-2022 Mark Nudelman
less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Home page: https://greenwoodsoftware.com/less
その理由は何ですか?
答え1
less
簡単に言うと、これは「安全」モードで実行されたときに内部パイプコマンドが無効になっているためです。つまり、if isLESSOPEN
で始めることはできません。|
LESSSECURE
1
しばらく調べた後、実行可能ファイル自体を調べzless
ました。zmore
FreeBSDでは、両方ともシェルスクリプトですが、zmore
より伝統的なラッパーgzip
(圧縮解除用)とless
(圧縮解除された文書を表示するため)のzless
短いシェルスクリプト呼び出しを実行しless
、環境変数をLESSOPEN
Call the scriptに設定します/usr/bin/lesspipe.sh
。
#!/bin/sh
#
# $FreeBSD$
#
export LESSOPEN="||/usr/bin/lesspipe.sh %s"
exec /usr/bin/less "$@"
lesspipe.sh
スクリプトには、case
入力ファイルのファイル名サフィックスに基づいて正しい解凍ユーティリティを呼び出すステートメントが含まれていますが、ここでは重要ではありません。要点は、LESSOPEN
内部パイプコマンドが環境変数に使用されることです。
環境変数LESSSECURE
がに設定されている1
場合は、less
「安全」モードで実行されます。この場合、ユーティリティは|
(パイプ)コマンドを無視します。
パズルの最後の部分は、LESSSECURE=1
シェルの初期化ファイルで実際にこれを設定したことを覚えておくことです。