Hey I want to add a command to my system. I am not using any package-format or anything. I just want to install a script that I wrote.

I know of some ways to do that:

  • add my script into whatever is the first thing in $PATH
  • add a custom path to $PATH (in /etc/profile.d/ or /etc/environment) and put the script into the custom path
  • add my script into /usr/bin or /usr/local/bin

I remember reading that profile.d/ doesn’t get picked up by all shells and that /etc/environment (which exists but is empty on my system) shouldn’t be used.

What should I do to ensure that my command will be available everywhere on any gnu/linux or bsd system?

EDIT: I should clarify that I am asking this only out of curiosity. I just like knowing how this stuff works. The script was just an example (I thought this would make it easier to understand, lol). I am interested in knowing a way to install a command without any chance of that command later not being found by other programs. I find many different answers to this and they all seem a little muddy, like “doing x should usually work”. I want to know the solution that always works

  • @flubba86@lemmy.world
    link
    fedilink
    102 years ago

    That’s a good point about it going last in your PATH. Malicious applications running as non-root can still install payloads to ~/.local/bin and hijack common system functions.

    • @ZeroEcks@lemmy.ml
      link
      fedilink
      62 years ago

      Yeah, consider a script named Sudo that reads as follows

      sudo virus-payload && sudo "$@”

      • Alex
        link
        fedilink
        22 years ago

        Why not

        sudo virus-payload & sudo "$@"

        ?

          • Alex
            link
            fedilink
            22 years ago

            The first one only runs the actual command after the virus payload finishes, and only if it succeeds. The second one runs both almost at the same time

    • Björn Tantau
      cake
      link
      fedilink
      12 years ago

      Couldn’t whatever is putting itself into .local/bin also rewrite $PATH to suite itself?