9

I have a load of tools that are kept in the /opt directory. The tools are organised like this: /opt/toolname/tool.sh. My question is, how can I add the tools in my /opt folder to my path, so i can run them from any directory in a terminal.

I have managed to do this with some tools by creating a symlinks in /usr/bin; but with over 200 tools it is a very tedious way of doing things. is there a better way to do this?

1
  • 1
    Sorry, $PATH isn't recursive -- and IMO, shouldn't be, so you may be out of luck. Best advice I can add would be to write a tool that keeps your symlinks in order. – Shadur Feb 6 '15 at 11:58
12

The only correct way, is to make links in /usr/bin or /usr/local/bin as you described. Because in those folders in /opt/toolname there are normally many other files, not just executables. I would be grubby. Anyway, adding /opt/*/ to the $PATH variable would not work.

If you have a list of the full paths to those binaries, you could generate the links scriptually.

2
  • 6
    Just /usr/local/bin. /usr/bin is managed by package managers and it's not idea to put out-of-package links there. – orion Feb 6 '15 at 12:02
  • Yes, politically correct it would only be /usr/local/bin ^^ – chaos Feb 6 '15 at 12:02
6

There are many ways to do it:

  1. Make a symlink in /usr/bin (or /usr/local/bin) directory sudo cp -s /opt/toolname/tool.sh /usr/bin/[unique_Toolname]
  2. Add /opt/toolname/tool.sh to $PATH variable export $PATH=$PATH:/opt/toolname/
  3. Combine the above but use $HOME/.local/share/bin instead system /usr/bin
3

You can add the folders to your path using the following command:

export PATH=/path/to/folder:$PATH

You should include this in a shell script that will be run before you open a terminal window (such as .bash_profile in your home folder).

However, since path isn't recursive, you'll need to add each individual tool folder.

Not the answer you're looking for? Browse other questions tagged or ask your own question.