in reply to Re: (OT) Fixing Line Endings - patch the shell
in thread (OT) Fixing Line Endings

Because it's not the shell. It's the kernel, really. (I think this has been on PM recently...ah, here we are).

I suggested (and outlined) a patch for the kernel above. There might be a more clever way of doing it with a loadable kernel module to avoid rebuilding your kernel, but that would probably be quite a bit more work (but allow you to use your vendor kernel).

  • Comment on Re^2: (OT) Fixing Line Endings - patch the shell

Replies are listed 'Best First'.
Re^3: (OT) Fixing Line Endings - patch the shell (kernel)
by tye (Sage) on Nov 30, 2006 at 17:18 UTC

    Yes, there's no good excuse for the kernel failing to ignore what is clearly whitespace. Someone please fix Linux already. This bug has existed for way too long.

    ( And how come it seems that there aren't any Linux users that know that she-bang lines are handled by the kernel? I think that change even predates Linux so there never was a Linux where the shell had to do the #!-handling. How many decades does it take for people to catch on? :)

    - tye        

      Interestingly, the kernel code in question (C, not perl I'm afraid :-) already does this:
      while (cp > bprm->buf) { cp--; if ((*cp == ' ') || (*cp == '\t')) *cp = '\0'; else break; }
      i.e. it finished the executable name at the first space or tab. I guess a better patch would be to change that if test to also null out '\r' (hmm...and probably form-feed and others whilst we're at it).

      I wonder how loudly people would scream if this were proposed as a kosher kernel patch. It breaks backwards compatability quite badly, but perhaps only for people who deserve it...

        Just change that to:

        if (isspace(*cp)) *cp = '\0';
        Don't forget to #include <linux/ctype.h> up top, though, to get this macro...

      When I first started with openbsd and freebsd 6 years ago I assumed the shell was responsible for the shebang, and never revisited the topic to challenge that assumption. It was never quite important enough for me to research it.