less не имеет представления о том, что находится на другой стороне канала, который подает данные в него через стандартный ввод, если только кто-то не сильно усложнит код для less чтобы найти группу процессов, в которой выполняется less , и другие процессы в этом процессе. группа, а затем кто знает, как все они сочетаются друг с другом (оболочка знает эту информацию, но может не сделать ее доступной).
Из некоторого чтения в less(1) можно найти опцию -P чтобы настроить приглашение
$ echo hi | less -P '?f%f:Standard input'
hi
Standard input
так что в теории, если мы можем заменить Standard input бит текущим конвейером оболочки ... давайте посмотрим, что set когда выполняется less ...
$ function less { set > whatisset; command less "$@"; }
$ echo foo | less
foo
$ egrep 'echo|foo' whatisset
$
так что ничего очевидного для mksh не используется, так как echo или foo (эквивалентно вашему grep) не появляются нигде в среде оболочки (та же история для zsh и ой, да, bash на Linux когда-либо спамит среду с настройками, но опять-таки та же история). На самом деле, с zsh мы можем использовать функцию preexec чтобы сделать командную строку доступной:
$ zsh
% function preexec { shift; SHORT=$1; }
% function less { set > whatisset; command less "$@"; }
% echo foo | less
foo
% grep SHORT whatisset
SHORT='echo foo | less'
%
так что можно сделать что-то вроде
% less() { =less -P '?f%f:'${SHORT%% | less} "$@"; }
% echo hi|less
hi
echo hi