RetroFed Forum
Your home away from modern life.
WTF is going on with my less
Post Reply
AuthorMessage
zarkanian sh.itjust.works zarkanian@sh.itjust.works
Joined: 2024-01-11
(edited) Quote

Today, I was doing some command-line stuff and then this happened:

ls --help|less
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
ESC]8;;https://www.gnu.org/software/coreutils/manual/coreutils.html#ls-aESC\ESC[1m-a, --allESC[0mESC]8;;ESC\
do not ignore entries starting with .
ESC]8;;https://www.gnu.org/software/coreutils/manual/coreutils.html#ls-AESC\ESC[1m-A, --almost-allESC[0mESC]8;;ESC\
do not list implied . and ..
ESC]8;;https://www.gnu.org/software/coreutils/manual/coreutils.html#ls--authorESC\ESC[1m--authorESC[0mESC]8;;ESC\

It's rendering ls --help with control characters. When I do ls --help|less --raw-control-chars it doesn't show the control characters, and it looks all neat and pretty. Isn't this the opposite of how it's supposed to work?!

Is --raw-control-chars a toggle and some config is causing less to show control characters when I invoke it with no options? If so, where can I find this config and stop this?

This has absolutely no bearing on my work and my life in general except for the fact that I'll go absolutely batshit trying to figure this out, because that's how my brain is. So far, all of my web searches just confirm that less shouldn't be working this way, but they don't give me any way to fix it. Please help me, Lemmy!!!

27   Original
testman lemmy.ml testman@lemmy.ml
Joined: 2020-10-28
#2 · (edited) Quote Reply

From what I see you are missing spaces around pipe (the | character).

It should be ls --help | less

-10
zarkanian sh.itjust.works zarkanian@sh.itjust.works
Joined: 2024-01-11
#3 · Quote Reply

From what I see you are missing spaces around pipe (the | character). It should be ls --help | less

That doesn't make any difference.

12
solrize lemmy.ml solrize@lemmy.ml
Joined: 2023-06-22
#4 · Quote Reply

Yeah use less -r. You can set that in your environment

export LESS="-EX -r"

is what I use.

1
quarrel4you piefed.social quarrel4you@piefed.social
Joined: 2026-02-26
#5 · Quote Reply

One option is to use less -R to see the pretty colors.
The boring option is to use ls --color=never and be sad.

5
darklamer feddit.org darklamer@feddit.org
Joined: 2026-02-19
#6 · (edited) Quote Reply

Yeah use less -r. You can set that in your environment export LESS="-EX -r" is what I use.

Capital -R is for most use-cases a safer and better choice than plain -r.

4
tangeli piefed.social tangeli@piefed.social
Joined: 2024-11-21
#7 · (edited) Quote Reply

I would say your ls shouldn't be working that way: when it detects that it's standard output isn't a terminal, it shouldn't be outputting the control codes. Which makes me wonder what version of ls you are running.

edit: what is the output from alias ls and what happens if you run \ls --help | less?

5
zarkanian sh.itjust.works zarkanian@sh.itjust.works
Joined: 2024-01-11
#8 · Quote Reply

I would say your ls shouldn't be working that way: when it detects that it's standard output isn't a terminal, it shouldn't be outputting the control codes. Which makes me wonder what version of ls you are running. edit: what is the output from alias ls and what happens if you run \ls --help | less?

I'm using the fish shell. I checked, and there are no aliases for ls or less. \ls --help | less gives me the same result as ls --help | less.

1
tangeli piefed.social tangeli@piefed.social
Joined: 2024-11-21
#9 · Quote Reply

I'm using the fish shell. I checked, and there are no aliases for ls or less. \ls --help | less gives me the same result as ls --help | less.

That's surprising. I have an older version of coreutils (9.7 from Debian 13) that doesn't produce the links and formatting. I'm running bash and the behaviour you're experiencing isn't reproduced.

Aliases aside, I wouldn't expect the shell to be the cause. None the less, I installed version 4.0.2 of the fish shell and ran the same command in it and didn't see any control characters. But that's not really surprising - my old version of ls doesn't produce them. So I ran ls | less because even with my version ls colour highlights files by type, but in the pipeline to less, there were no codes.

If I run ls --color=always | less then I do see codes in the less output.

You might check your environment variables to see if CLICOLOR_FORCE is set.

Otherwise, I am out of ideas.

1
elmicha feddit.org elmicha@feddit.org
Joined: 2024-06-27
#10 · Quote Reply

What's the value of $LESSOPEN? These URLs in a manual page look strange.

1
Dultas lemmy.world Dultas@lemmy.world
Joined: 2023-08-03
#11 · Quote Reply

I'm using the fish shell. I checked, and there are no aliases for ls or less. \ls --help | less gives me the same result as ls --help | less.

What terminal are you using?

1
thingsiplay lemmy.ml thingsiplay@lemmy.ml
Joined: 2026-01-09
#12 · (edited) Quote Reply

/usr/bin/ls --color=never --help | /usr/bin/less and /usr/bin/ls --color=never --help > ~/Desktop/lshelp.txt produces and contains the same characters, BTW. This happens in Bash and Zsh, using Kitty and Konsole terminals. So its not an issue with less, the shell or terminal. Meaning it might be an issue with ls itself. I have "ls (GNU coreutils) 9.11" from ls --version.

Ah ls has an option for this: -q, --hide-control-chars But ls -q --color=never --help | less seem not to hide anything, maybe because --help is in use. I can put strings in between, it would only hide control characters, not the normal sequence for other stuff \ls -q --color=none --help | strings | less

Looks like an issue with ls. I feel helpless.

1
CallMeAl (like Alan) piefed.zip CallMeAl@piefed.zip
Joined: 2025-12-14
#13 · (edited) Quote Reply

Per the Gnu Coreutils NEWS file:

  All commands now markup option names in --help and man pages,  
  with bold attributes, and hyperlinks into the online manual on gnu.org.  
  The links can be configured with the --enable-manual-url configure option,  
  and the bold highlighting with --disable-bold-man-page-references.  
  At runtime all markup can be disabled with the TERM=dumb env var value.  

This has nothing to do with less (or bash or fish). It is a new behavior as of Coreutils 9.10. It is to preserve the hyperlinks in the help output of ls, cp, rm, mv, etc. In default mode, less catches these control codes and escapes them so you see the visual escape codes. If you use less --raw-control-chars then less is NOT escaping the control characters (just passing them through) and they get interpreted by the terminal as screen formatting codes.

Debian 13, which ships Coreutils 9.7 does not have the change and cannot reproduce the behavior.

14
esa discuss.tchncs.de syklemil@discuss.tchncs.de
Joined: 2024-12-16
#14 · Quote Reply

/usr/bin/ls --color=never --help | /usr/bin/less and /usr/bin/ls --color=never --help > ~/Desktop/lshelp.txt produces and contains the same characters, BTW. This happens in Bash and Zsh, using Kitty and Konsole terminals. So its not an issue with less, the shell or terminal. Meaning it might be an issue with ls itself. I have "ls (GNU coreutils) 9.11" from ls --version. Ah ls has an option f...

-q controls output for filenames. From ls.c:

/* True means output nongraphic chars in file names as '?'.
   (-q, --hide-control-chars)
   qmark_funny_chars and the quoting style (-Q, --quoting-style=WORD) are
   independent.  The algorithm is: first, obey the quoting style to get a
   string representing the file name;  then, if qmark_funny_chars is set,
   replace all nonprintable chars in that string with '?'.  It's necessary
   to replace nonprintable chars even in quoted strings, because we don't
   want to mess up the terminal if control chars get sent to it, and some
   quoting methods pass through control chars as-is.  */
static bool qmark_funny_chars;
2
esa discuss.tchncs.de syklemil@discuss.tchncs.de
Joined: 2024-12-16
#15 · Quote Reply

Per the Gnu Coreutils NEWS file: All commands now markup option names in --help and man pages, with bold attributes, and hyperlinks into the online manual on gnu.org. The links can be configured with the --enable-manual-url configure option, and the bold highlighting with --disable-bold-man-page-references. At runtime all markup can be disabled with the TERM=dumb env var value. This has nothing...

You may want to tag your triple-backtick with something like text or plain so you don't get auto-inferred syntax highlighting. E.g:

 All commands now markup option names in --help and man pages, 
2
esa discuss.tchncs.de syklemil@discuss.tchncs.de
Joined: 2024-12-16
#16 · Quote Reply

When I do ls --help|less --raw-control-chars it doesn't show the control characters, and it looks all neat and pretty. Isn't this the opposite of how it's supposed to work?!

You've gotten a longer reply to this, but just to make it clear: No, that's how it's supposed to work.

  • By default less mangles control characters so they can't do anything to your display (or bell)
  • With -R, less will pass some control characters through raw and unmangled; enough to give you stuff like pretty colours
  • With -r, less won't mangle any control characters, which, if you're doing something stupid like trying to read a binary file, can leave your terminal prompt fucked up and in need of a reset.
4
CallMeAl (like Alan) piefed.zip CallMeAl@piefed.zip
Joined: 2025-12-14
#17 · Quote Reply

You may want to tag your triple-backtick with something like text or plain so you don't get auto-inferred syntax highlighting. E.g: All commands now markup option names in --help and man pages,

good one, thanks!

2
TrollAccount69 lemmy.ml TrollAccount69@lemmy.ml
Joined: 2026-08-10
#18 · Quote Reply

Sounds like it was more trouble than it was worth!

7
Post Reply
Back to top