Hi,

Can anyone please remove my email address?

I’ve asked couple of times.

Thank you.


Cheers,
Mahinder.

On Sun, 2 Aug 2026 at 8:54 pm, Pádraig Brady <[email protected]> wrote:

> On 02/08/2026 02:10, Collin Funk wrote:
> > Pádraig Brady <[email protected]> writes:
> >
> >> On 31/07/2026 18:27, Collin Funk wrote:
> >>> I haven't looked at the patches yet, but I guess 'id', 'who', etc.
> might
> >>> as well be changed while we are at it. User and group names can
> >>> theoretically have bytes that are invalid characters in the current
> >>> locale. In practice, if you are using non-ASCII characters you are
> >>> probably asking for trouble.
> >> Yes good point.
> >> Though \n and other control chars aren't allowed in practice,
> >> so I'm leaning towards not quoting those as it's redundant.
> >> I'll think a bit more about it.
> >
> > I also considered whether it may be worth quoting output of 'env' and
> > 'printenv', which could be made ambiguous.
> >
> > E.g., in the following example only "a" is an environment variable:
> >
> >      $ env -i $'a=b\nd=c' printenv
> >      a=b
> >      d=c
> >
> > But, I am not sure the quoted output makes it more understandable:
> >
> >      $ env -i $'a=b\nd=c' ./src/printenv
> >      'a=b'$'\n''d=c'
> >
> > Also, if you can't trust your parent process not to insert slop into
> > your environment variables, you probably have larger problems.
> >
> > Here was the patch I used, anyways:
> >
> > diff --git a/src/printenv.c b/src/printenv.c
> > index c2b1c69cd..a8082b925 100644
> > --- a/src/printenv.c
> > +++ b/src/printenv.c
> > @@ -32,6 +32,7 @@
> >   #include <sys/types.h>
> >   #include <getopt.h>
> >
> > +#include "argmatch.h"  /* argmatch($QUOTING_STYLE).  */
> >   #include "system.h"
> >
> >   /* Exit status for syntax errors, etc.  */
> > @@ -44,6 +45,8 @@ enum { PRINTENV_FAILURE = 2 };
> >     proper_name ("David MacKenzie"), \
> >     proper_name ("Richard Mlynarik")
> >
> > +static bool quote_output;
> > +
> >   static struct option const longopts[] =
> >   {
> >     {"null", no_argument, NULL, '0'},
> > @@ -107,12 +110,24 @@ main (int argc, char **argv)
> >           }
> >       }
> >
> > +  if (!opt_nul_terminate_output && isatty (STDOUT_FILENO))
> > +    {
> > +      int qs = getenv_quoting_style ();
> > +      if (qs < 0)
> > +        qs = shell_escape_quoting_style;
> > +      if (qs != literal_quoting_style)
> > +        {
> > +          set_quoting_style (NULL, qs);
> > +          quote_output = true;
> > +        }
> > +    }
> > +
> >     bool ok;
> >     if (optind >= argc)
> >       {
> >         for (char **env = environ; *env != NULL; ++env)
> >           {
> > -          fputs (*env, stdout);
> > +          fputs (quote_output ? quoteN (*env) : *env, stdout);
> >             putchar (opt_nul_terminate_output ? '\0' : '\n');
> >           }
> >         ok = true;
> > @@ -137,7 +152,7 @@ main (int argc, char **argv)
> >                   {
> >                     if (*ep == '=' && *ap == '\0')
> >                       {
> > -                      fputs (ep + 1, stdout);
> > +                      fputs (quote_output ? quoteN (ep + 1) : ep,
> stdout);
> >                         putchar (opt_nul_terminate_output ? '\0' : '\n');
> >                         matched = true;
> >                         break;
> >
> > Collin
>
> This actually makes lots of sense.
> This is a very common issue actually, one that I hit all the time.
> as I have this in my .bashrc:
>
>    # Adjust the less highlight colors
>    export LESS_TERMCAP_so="$(printf 'rev\nbold\nsetaf 3\n' | tput -S)"
>    export LESS_TERMCAP_se="$(tput sgr0)"
>
> That results in messed up colors when printing my environment.
>
> I've just realized I didn't notice that in a while,
> and now I see that `set` in bash quotes output.
> zsh, and ksh also quote, while dash does not.
>
> So therefore for pragmatic reasons I do think printenv should quote on tty
> as you've done.
> Also env(1) without a command prints the environment, and should also
> quote.
>
> cheers,
> Padraig
>
>

Reply via email to