clone 363250 -1 reassign -1 general retitle -1 PAGER as a pipeline tags 363250 fixed-upstream thanks
On Sun, Apr 23, 2006 at 09:52:34PM +0200, Loïc Minier wrote: > Yes, indeed, the root of the problem is the change of support for > pipelines. However, I'm not sure that pipelines worked in the use case > of passing a file as a parameter to $PAGER in the past. > > Currently, each program (for example man) has its way of calling > $PAGER, perhaps as "$PAGER <file name>" or piping to "sh -c "$PAGER"", > or perhaps piping directly to "$PAGER". > > Of course, if we say $PAGER can be a pipeline, and a pager can be used > both as "$PAGER <file name>" and as the end of a pipeline, then > defining $PAGER to be a pipeline must work in both cases, but I'm not > sure it is a regression to not support pipelines in the use case of a > file name as argument. > > In other words: > > $PAGER is a $PAGER is a > program pipeline > ==================================================================== > call $PAGER as works ??? > $PAGER <file name> > ==================================================================== > call $PAGER as > cat <data> | $PAGER works works That last entry is not correct. See below. > I do agree that the two use cases that you listed in a previous message > exist, I'm not sure they were both supported in the case where $PAGER > is a pipeline, but we can work on fixing that at least in > sensible-pager by using systematically: cat "$@" | $PAGER Sorry I took so long to deal with this bug report against man-db. I must confess that the length of the thread intimidated me a bit! For the meantime, I note that putting pipes in $PAGER doesn't work even with sensible-pager, since variable expansion doesn't work that way in shell: $ cat f foo bar $ PAGER='cat | grep bar' sensible-pager f cat: |: No such file or directory cat: grep: No such file or directory cat: bar: No such file or directory foo bar $ PAGER='cat | grep bar' <f sensible-pager cat: |: No such file or directory cat: grep: No such file or directory cat: bar: No such file or directory To be precise, expansion happens after shell input is parsed into commands. See: http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_01 I therefore don't think it makes sense to do the not inconsiderable amount of work required to support pipes-in-$PAGER in man-db when even sensible-pager can't cope wth it. (The reason it used to work was that man-db used to be very sloppy about all sorts of things and just passed stuff to system(); over the last few years I taught it how to handle pipelined command execution itself, which fixed a wide variety of interesting bugs. As a result, though, pipes in $PAGER and other things that man-db interprets stopped being supported.) For the meantime, I've simply documented the constraints on PAGER and friends in man(1), and advised the use of a script in such cases: Tue Jul 21 15:17:49 BST 2009 Colin Watson <cjwat...@debian.org> * man/man1/man.man1 (Controlling formatted output, ENVIRONMENT): Explicitly state that -P/$PAGER/$MANPAGER identifies a single command with no pipes (Debian bug #363250). If we want to extend PAGER in general, then I'm willing to revisit this. Cheers, -- Colin Watson [cjwat...@debian.org] -- To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org