LESSPIPE.SH(1) User Commands LESSPIPE.SH(1)

lesspipe.sh - پالایه‌ای برای less

lesspipe.sh [FILE[s]]...

هدف lesspipe.sh بهبود خروجی less است. انتخاب قواعدی که برای تغییر خروجی اعمال می‌شوند، بر اساس محتوای فایل انجام می‌گیرد. پسوند فایل تنها به عنوان آخرین راهکار در نظر گرفته می‌شود. معمولاً lesspipe.sh به عنوان یک پالایه ورودی برای less فراخوانی می‌شود.

به کمک این پالایه، less محتوای غیرفشرده فایل‌های فشرده (gzip، bzip2، compress، zstd، lz4، lzip، xz، lzma، zlib یا brotli) را نمایش می‌دهد. برای فایل‌های حاوی آرشیو و دایرکتوری‌ها، فهرستی از محتویات نمایش داده خواهد شد (قالب‌های tar، ar، zip، 7-zip، rar، jar، cpio، rpm، deb، ms-cabinet، iso، dmg، appimage و snap). بسیاری از فایل‌های دیگر نیز برای نمایش مجدداً قالب‌بندی می‌شوند. این شامل قالب‌های مجموعه‌های pdf، dvi، markdown، Office (MS and OpenOffice)، قالب‌های NetCDF، matlab، device tree blob، html، xml و رسانه‌ای (تصویر، صدا و ویدیو) است. این کار مستلزم نصب برنامه‌های کمکی است.

این پالایه همچنین می‌تواند به صورت بازگشتی اعمال شود تا فایل‌های موجود در آرشیوها را در لحظه استخراج کرده و نمایش دهد. این سازوکار تا عمق ۶ کار می‌کند، که در آن اعمال هر الگوریتم رفع‌فشردگی به منزله یک سطح جداگانه به شمار می‌رود.

اگر ابزار file متنی را با کدگذاری متفاوتی نسبت به آنچه در ترمینال استفاده می‌شود گزارش کند، متن با استفاده از iconv به کدگذاری پیش‌فرض تبدیل خواهد شد. این موضوع فرض را بر این می‌گذارد که دستور file کدگذاری فایل را به درستی تشخیص می‌دهد، که در برخی شرایط ممکن است نادرست باشد. افزودن یک دو‌نقطه به نام فایل مانع این تبدیل می‌شود.

هنگام استفاده از برنامه‌های git، vim یا mutt، می‌توان آن‌ها را فعال کرد تا با استفاده از lesspipe.sh فایل‌های غیرمتنی را بخوانند. این فرایند در ویکی در https://github.com/wofr06/lesspipe/wiki شرح داده شده است.

این پالایه به شرطی از less فراخوانی می‌شود که متغیر محیطی LESSOPEN به درستی تنظیم شده باشد. برای پوسته‌های شبه ksh (bash، zsh)، دستور

LESSOPEN="|lesspipe.sh %s"; export LESSOPEN
پالایه را برای less فعال می‌کند. چنانچه lesspipe.sh در مسیر جستجو قرار ندارد، از مسیر کامل استفاده کنید. دستور لازم برای تنظیم LESSOPEN می‌تواند با فراخوانی lesspipe.sh بدون هیچ آرگومانی نیز نمایش داده شود. این حتی می‌تواند برای تنظیم مستقیم LESSOPEN به کار رود:
eval `lesspipe.sh`
(bash) or
lesspipe.sh | source /dev/stdin
(zsh)

دستورهای بالا تنها در صورتی مطابق توضیحات کار می‌کنند که نام فایل lesspipe.sh باشد. اگر تحت نام دیگری نصب شده باشد، فراخوانی آن بدون آرگومان به عنوان یک پالایه با فعال بودن LESSQUIET عمل کرده و انتظار ورودی از STDIN را خواهد داشت.

با تنظیم متغیر محیطی به شرح فوق، less اطلاعات متنی را برای طیف وسیعی از قالب‌های فایل نمایش خواهد داد.

در حالت عادی اگر ورودی به less لوله‌کشی (pipe) شود، پالایه فراخوانی نمی‌شود؛ مانند:

cat somefile | less
با این حال همان‌طور که در صفحه راهنمای less توضیح داده شده است، پالایش در لوله را می‌توان با شروع LESSOPEN با نویسه‌های |- اجباری کرد.

اگر دستورات درون lesspipe.sh شکست بخورند، گاهی پیام‌های خطا نمایش داده می‌شوند؛ این رفتار یک اشکال (bug) در نظر گرفته می‌شود و باید گزارش شود.

برای جلوگیری از نمایش پیام‌های توصیفی در خط اول خروجی پالایه، متغیر محیطی LESSQUIET می‌تواند روی یک مقدار غیرخالی تنظیم شود.

برای از کار انداختن موقت پالایه، می‌توان یک دو‌نقطه به نام فایل اضافه کرد. اگر خروجی رنگی بوده باشد، دو‌نقطه فقط دستور رنگ‌آمیزی را غیرفعال می‌کند. در چنین حالتی ممکن است برای نمایش محتوای اصلی به یک دو‌نقطه دوم نیاز باشد. اگر نام فایل شامل دو‌نقطه باشد، باید به جای آن از علامت مساوی استفاده شود.

فایل‌های دارای قالب HTML و Perl POD همیشه پردازش و رندر می‌شوند. اما گاهی اوقات ممکن است بخواهید محتوای اصلی فایل را ببینید. همان‌طور که پیش‌تر گفته شد، این کار با افزودن یک دو‌نقطه به نام فایل قابل انجام است. اگر نوع فایل درست (html، pod) به دنبال آن بیاید، خروجی می‌تواند رنگ‌آمیزی شود (همچنین بخش زیر را ببینید).

مثال: less index.html:html

اگر برنامه اجرایی xmq نصب شده باشد، XML به شکل متفاوتی رندر می‌شود تا تشخیص ساختار XML آسان‌تر شود. نمایش مشابهی برای محتویات HTML با استفاده از xmq نیز با افزودن یک دو‌نقطه به نام فایل به دست می‌آید. برای دریافت محتوای اصلی فایل HTML، در این حالت به دو بار درج دو‌نقطه نیاز است. طرح رنگ استفاده‌شده برای پس‌زمینه روشن است. برای انتخاب طرح رنگ تیره، متغیر محیطی XMQ_THEME باید روی مقدار dark تنظیم شود.

این پالایه قادر است برجسته‌سازی نحو را برای طیف وسیعی از انواع فایل انجام دهد. این قابلیت همیشه مطلوب نیست و می‌تواند نمایش فایل را به‌میزان قابل‌توجهی کند کند. از این رو، متغیر محیطی LESS_MAXSIZE_COLOR (پیش‌فرض: 200000) معرفی شده است. فایل‌های بزرگ‌تر رنگ‌آمیزی نمی‌شوند. در صورت نصب بودن، از nvimpager برای رنگ‌آمیزی خروجی استفاده می‌شود. در غیر این صورت، برنامه‌های bat/batcat، pygmentize، e2ansi-cat، source-highlight، vimcolor و code2color به نوبت امتحان می‌شوند. برای bat/batcat، تم روی ansi و سبک روی plain تنظیم شده است که به خروجی پالایش‌نشده less نزدیک‌تر است. این تنظیمات را می‌توان در ~/.config/bat/config یا با متغیرهای محیطی BAT_STYLE و BAT_THEME تغییر داد.

محتوای فایل‌های ثبت وقایع (log) در صورتی که برنامه tspin نصب شده باشد و رشته ":log" به انتهای نام فایل ضمیمه شود یا پسوند فایل "log" باشد، می‌تواند رنگ‌آمیزی شود.

از میان ابزارهای رنگ‌آمیزی، می‌توان با تنظیم متغیر محیطی LESSCOLORIZER به نام ابزار مورد نظر، اولویت استفاده را به آن داد. برای pygmentize و bat/batcat، تنظیمات محدود گزینه‌ها به صورت زیر مجاز است:

LESSCOLORIZER='pygmentize -O style=foo' # -P allowed as well
LESSCOLORIZER='bat --style=foo --theme=bar' # default: theme=ansi, style=plain

برجسته‌سازی نحو در صورتی فعال می‌شود که متغیر محیطی LESS وجود داشته و شامل گزینه -R باشد، یا اینکه less با این گزینه فراخوانی شود. این امر تضمین می‌کند که توالی‌های گریز (escape sequences) به رنگ تبدیل شده و نمایش صفحه را مخدوش نکنند. استفاده از گزینه -r توصیه نمی‌شود، زیرا در صورت وجود خطوط طولانی در خروجی، چیدمان صفحه نمایش ممکن است به هم بریزد.

برجسته‌سازی نحو را می‌توان در صورت رنگی بودن خروجی، با افزودن یک دو‌نقطه پس از نام فایل غیرفعال کرد. اگر زبان نادرستی برای برجسته‌سازی نحو انتخاب شده باشد، می‌توان با افزودن یک دو‌نقطه و یک پسوند به نام فایل، زبان دیگری را تحمیل نمود. فهرست پسوندها و زبان‌های پشتیبانی‌شده را می‌توان با استفاده از دستورهای رنگ‌آمیزی زیر چاپ کرد:

bat --list-languages
batcat --list-languages
pygmentize -L lexers
M-x -mode [TAB] within emacs
source-highlight --lang-list
code2color -h
vimcolor -L (both for vimcolor and nvimpager)

در لوله‌ها (pipe)، این روش قابل استفاده نیست. به عنوان یک راه‌حل جایگزین، می‌توان یک آرگومان نهایی اضافه کرد که توسط lesspipe.sh بررسی می‌شود. استفاده از یک دو‌نقطه تکی (از کار انداختن پالایه) یا :extension (تحمیل زبان) امکان‌پذیر است، مانند:

command that generates C code | less - :c

هنگامی که شرایط برجسته‌سازی نحو برقرار باشد، فهرست‌بندی دایرکتوری‌ها و فهرست محتوای فایل‌های tar نیز رنگ‌آمیزی می‌شوند.

از آنجا که less به عنوان مرورگر پیش‌فرض در برنامه‌های دیگر (مانند man، git و perldoc) استفاده می‌شود، ممکن است lesspipe.sh به کار افتاده و خروجی آن برنامه‌ها را تغییر دهد.

برای تمامی فایل‌های متنی ساده که به عنوان فایل لاگ شناسایی نشده‌اند، باز هم یک رنگ‌آمیز آزموده می‌شود زیرا گاهی می‌تواند نوع فایل را به درستی تشخیص داده و آن را به طور مناسب رنگ‌آمیزی کند. با این وجود، این کار قابلیت مشاهده فایل‌های در حال رشد با استفاده از دستور F در less را از بین می‌برد. برای حفظ قابلیت مشاهده فایل‌های در حال رشد بدون پسوند .log یا در حالتی که رنگ‌آمیز فایل لاگ tspin برای فایل‌های لاگ فراخوانی شده است، باید یک دو‌نقطه تکی به عنوان آرگومان دوم به فراخوانی less داده شود؛ مانند:

less /var/log/syslog :
این امر همچنین می‌تواند با فهرست کردن چنین فایل‌هایی در پرونده .lessignore در دایرکتوری خانگی کاربر انجام شود. ورودی‌ها مسیرهای کاملاً مشخص هستند یا شامل نویسه‌های تطبیق الگو (globbing) می‌شوند. چنین فایلی می‌تواند به شکل زیر باشد:
syslog
*/syslog
*.syslog

این پیکربندی امکان مشاهده فایل‌های در حال رشد با نام syslog، تمام فایل‌های syslog در دایرکتوری‌های دلخواه و تمامی فایل‌های با پسوند .syslog را فراهم می‌سازد.

این نسخه از lesspipe.sh به شما اجازه می‌دهد فایل‌های مجزای موجود در یک آرشیو را، که خود حتی ممکن است درون آرشیو دیگری قرار داشته باشد، مشاهده کنید.

نشانه‌گذاری برای مشاهده فایل‌ها در آرشیوهای چندفایلی بدین صورت است:

less archive_file:contained_file
یا حتی
less super_archive:archive_file:contained_file
برای نمایش آخرین فایل در این زنجیره به صورت خام، باید یک دو‌نقطه (:) به انتهای نام فایل ضمیمه شود. اگر نام فایل شامل دو‌نقطه باشد، باید از نویسه جداکننده جایگزین یعنی علامت مساوی (=) استفاده شود.

مجدداً، این روش استخراج و نمایش فایل‌ها در صورتی که less در یک لوله خروجی فراخوانی شود و LESSOPEN با نویسه‌های |- آغاز گردد، کارایی ندارد. همانند حالت برجسته‌سازی نحو، راه‌حل استفاده از آرگومان دومی است که با یک دو‌نقطه شروع شود. در نتیجه دستور فوق به صورت زیر نوشته می‌شود:

cat super_archive | less - :archive:contained_file

به لطف فایل lesscomplete ارائه‌شده (برای zsh و bash) و فایل‌های _less (برای zsh) و less (برای bash) که در طول نصب ایجاد می‌شوند، تکمیل با کلید تب (tab completion) برای فایل‌های موجود در آرشیوها امکان‌پذیر است. وارد کردن یک دو‌نقطه (:) یا یک علامت مساوی (=) پس از نام فایل آرشیو و سپس فشردن کلید تب، سازوکار تکمیل خودکار را فعال می‌سازد. این سازوکار در آرشیوهای زنجیره‌ای نیز کار می‌کند. فایل‌های مورد نیاز برای الگوریتم تکمیل، با توجه به گزینه‌های انتخاب‌شده در هنگام نصب (اسکریپت پیکربندی configure)، در دایرکتوری‌ها نصب می‌شوند.

فایل lesscomplete باید در یکی از دایرکتوری‌های فهرست‌شده در $PATH و تابع _less برای zsh در دایرکتوری فهرست‌شده در $fpath قرار داشته باشد. فایل less همراه با دستورالعمل‌های تکمیل برای bash باید در یک اسکریپت راه‌اندازی bash، مانند ~/.bashrc، با دستور source بارگذاری شود. دایرکتوری‌های جدید نظیر ~/scripts و ~/.fpath (برای zsh) را می‌توان با استفاده از دستورهای زیر اضافه کرد:

PATH=~/scripts:$PATH # (lesspipe.sh, less) fpath=(~/.fpath $fpath) # (_less, zsh only)

در zsh، چنانچه از قبل انجام نشده باشد، باید compinit فراخوانی شده و گزینه menucomplete تنظیم شود. این کار با دستورهای زیر میسر است:

autoload compinit
compinit -Uz
setopt menucomplete

در bash، بسته bash-completion (معمولاً بسته‌ای با همین نام) باید نصب شده باشد.

سازوکار پالایش کمتر‌پیپ (lesspipe.sh) را می‌توان با برنامه‌ای تعریف‌شده توسط کاربر جایگزین کرد یا آن را بهبود بخشید. چنین برنامه‌ای باید یا .lessfilter نامیده شود (و در دایرکتوری خانگی کاربر قرار گیرد) یا lessfilter نام داشته باشد (و از دایرکتوری ذکرشده در $PATH در دسترس باشد). این فایل باید قابل اجرا باشد و در صورتی که پالایش درون آن اسکریپت انجام گرفت، باید کد خروج 0 را برگرداند. در غیر این صورت، یک کد خروج غیر صفر نشان می‌دهد که انجام پالایش به lesspipe.sh واگذار شده است.

این سازوکار می‌تواند برای افزودن پالایش قالب‌های جدید، یا برای نمونه جهت مهار پالایش برای انواع خاصی از فایل‌ها به کار رود. یک نمونه .lessfilter می‌تواند به صورت زیر باشد:

#!/usr/bin/env bash

case $1 in
*.md|*.MD|*.mkd|*.markdown|*.rst)
# if the Python module rich.markdown is not found then
# the exit code is nonzero and lesspipe.sh is called
python3 -m rich.markdown -c $1 ;;
*.html|*.htm)
# call your favorite HTML beautifier, cat -b is just a boring example
cat -b $1 ;;
*)
exit 1;;
esac

Wolfgang Friebel

گزارش باگ‌ها را به <wp.friebel AT gmail DOT com> ارسال کرده یا یک اشکال (issue) در github باز کنید.

حق نشر © 2005-2026 متعلق به Wolfgang Friebel است.
این یک نرم‌افزار آزاد است؛ برای شرایط تکثیر به کد مبدأ مراجعه کنید. هیچ ضمانتی وجود ندارد؛ حتی برای قابلیت فروش یا تناسب با یک هدف خاص.

less(1)

توضیحات مربوط به lesspipe.sh را می‌توان در README موجود در بسته کد مبدأ نیز یافت.

April 2026 lesspipe.sh