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:'$ "$@"; } % echo hi|less hi echo hi