Re: 'ls' name and 'ls | grep name' different
- In reply to: Kyle Evans : "Re: 'ls' name and 'ls | grep name' different"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 09 Mar 2024 17:55:34 UTC
et voila ::; ls 1989*1989 Amnésia.mp4:; LANG=fr_FR.UTF-8:; ls 1989*1989
Amn??sia.mp4
Le sam. 9 mars 2024 à 17:41, Kyle Evans <kevans@freebsd.org> a écrit :
On 3/9/24 10:37, Michael Sierchio wrote:
>
>
> On Sat, Mar 9, 2024 at 11:19 AM φ Dhénin Jean-Jacques <dhenin@gmail.com
> <mailto:dhenin@gmail.com>> wrote:
>
> Bonjour,
>
> I explain it as simple as possible:
>
> :; set | egrep 'LC_A|LANG'
> GDM_LANG=fr_FR.UTF-8
> LANG=fr_FR.UTF-8
> LC_ALL=fr_FR.UTF-8
> SLIM_LANG=fr_FR.UTF-8
>
> :; ls -i 1989* ; ls -i | grep 1989 ; ls -ib 1989* ; ls -ib |
> grep 1989
> 9920 1989 Amn*??*sia.mp4
> 9920 1989 Amn*é*sia.mp4
> 9920 1989 Amn\303\251sia.mp4
> 9920 1989 Amn\303\251sia.mp4
>
>
> Bonjour J-J –
>
> It's not that the pipe modifies the stream, it's that 'ls' has decided
> that 'e-accent-aigu' is unprintable in the current locale.
>
> Try ls -B and then investigate the locale.
>
> *-B* Force printing of non-printable characters (as defined by
> /ctype/(3) <
https://man.freebsd.org/cgi/man.cgi?query=ctype&sektion=3&a
propos=0&manpath=FreeBSD+14.0-RELEASE+and+Ports> and current locale
settings) in file names as *\*/xxx/,
> where/xxx/ is the numeric value of the character in
octal. This
> option is not defined in IEEE Std 1003.1-2008 ("POSIX.1")
>
ls(1) notably does toggle this behavior on by default only if stdout is
a tty requiring the above noted flag, and leaves it disabled if it's piping:
https://cgit.freebsd.org/src/tree/bin/ls/ls.c#n241
This gives grep the chance to just let it render.
Thanks,
Kyle Evans
--
---------------------------------------------------------📞 06 89 66 51 35
(V) Dhénin Jean-Jacques
( ..) 48, rue de la Justice 78300 Poissy
c(')(') dhenin@gmail.com
---------------------------------------------------------