Or is there maybe a way to set the pager for all help related queries to some command? I’m using bat and would like to pipe all --help through | bat --language=help by default for the syntax highlighting and colored output… Or if you know a lower effort way to color the output of --help let me know.

  • bleistift2@sopuli.xyz
    link
    fedilink
    English
    arrow-up
    7
    ·
    2 hours ago

    To answer the original question, even though @RedWeasel@lemmy.world’s advice really is superior:

    All commands that can be executed via your shell must live in your $PATH or their subdirectories. You could enumerate all files in there, filter by being executable, and run them with the --help argument.

    You can then filter these commands by their exit code. If --help is a recognized flag, the exit code should be 0. Otherwise it should be something else. (Running every command blindly might be a bad idea though.)

    • RedWeasel@lemmy.world
      link
      fedilink
      English
      arrow-up
      3
      ·
      2 hours ago

      Or if you are lazy you could add “-h” as an option to said help command for when --help doesn’t work. Shouldn’t take to long to to make a list with a script that runs each command to with --help and logs it all to a file though. Then just go look for the ones that don’t like it in the log. Apparently bash has a builtin command named help, so a different name is probably better then.

      ls -1 $dir | while read line do echo “----------” $line --help |& >> logfile.txt done

      Just search in you favorite pager for “-----” and just hit “next” key.

  • RedWeasel@lemmy.world
    link
    fedilink
    English
    arrow-up
    11
    ·
    3 hours ago

    I think your best bet to to create a script called help and run “help <command>” and the script would do the rest.

    • allywilson@lemmy.ml
      link
      fedilink
      arrow-up
      5
      ·
      3 hours ago

      I think this is the correct answer in all honesty. Create a new script like help (or man2 or whatever) that pipes the argument through bat for you.

    • 𞋴𝛂𝛋𝛆@lemmy.worldOP
      link
      fedilink
      English
      arrow-up
      2
      ·
      3 hours ago

      There has to be a hook somewhere for every command that executes. I’m not sure, but something in the chain after using set -x then running any terminal command likely is on the right path to doing this. (If you try set -x, you can turn it off with set +x). set -o options are another I’m not very familiar with but might be related.

      • friend_of_satan@lemmy.world
        link
        fedilink
        English
        arrow-up
        2
        ·
        50 minutes ago

        set -x configures the running process, your shell. This is a posix standard flag. See https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html

        there has to be a hook somewhere for every command that executes

        Why do think this? I’m not aware of any shells that have such a feature. I’m not saying it couldn’t be done, but it would be a new feature.

        I like the other suggestion of having a wrapper script that does what you need.

      • RedWeasel@lemmy.world
        link
        fedilink
        English
        arrow-up
        3
        ·
        2 hours ago

        You’d be intercepting all commands just to verify if they have a help flag and then if not executing them as they were intended. If the intercept got broke, then the shell would be completely broken.

        • 𞋴𝛂𝛋𝛆@lemmy.worldOP
          link
          fedilink
          English
          arrow-up
          1
          arrow-down
          1
          ·
          2 hours ago

          The --help output must be getting passed through groff at some point to create the layout with tabbing. Wherever that is happening must have a point of entry. Perhaps it only requires modifying groff with a filter function or something like that?

          • RedWeasel@lemmy.world
            link
            fedilink
            English
            arrow-up
            3
            arrow-down
            1
            ·
            edit-2
            2 hours ago

            Not everything uses groff. A lot will have their own function or another.

            Edit: I think for what you indicting you are wanting to try you’d need to either patch your shell of choice or write your own.

            Edit2: If you did patch it, the best way I can think of to get something upstreamed would be to patch bash to use CTRL-Enter to automatically pipe the output to the default pager defined in BASHPAGER followed by PAGER if it doesn’t exist. Then set the BASHPAGER to your “bat” command.

            • Ephera@lemmy.ml
              link
              fedilink
              English
              arrow-up
              1
              ·
              1 hour ago

              Frankly, I would be surprised, if anything uses groff for displaying --help, unless it shows the man page for that.
              The most basic implementation of --help is a manually formatted multi-line string written into the source code, which gets printed as-is.
              For dynamic layouting, you do need more logic, but rendering it to groff source code first does not make that easier. For tabbing, you print an appropriate number of \t.

            • 𞋴𝛂𝛋𝛆@lemmy.worldOP
              link
              fedilink
              English
              arrow-up
              1
              ·
              1 hour ago

              At this point, someone has to have already made a prettier shell or terminal that is configured like this by default. Hideous 1950s monocolor --help output can’t be a novel issue in 2025.