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