2

I have ready bash script, which extensively uses wget command. Unfortunately wget is not available at standard path, but available at:

/usr/custom/bin/wget

I was able to make it usable w/o path in bash console, by introducing an alias:

alias wget="/usr/custom/bin/wget"

Still it's not seen from bash script:

./deploy.sh: line 312: wget: command not found

How do I make things work without rewriting the script itself?

P.S. ~/.bashrc is available for editing on the box, so I will be happy to persist those changes.

  • Why not just use /usr/custom/bin/wget (instead of just wget) in your script? Then it should work without problem, and for those using the script, it shouldn't matter how a command in it is called. Most editors have a search-replace function which could quickly do the change (and there is also sed). – Baard Kopperud Nov 11 '14 at 15:52
  • @BaardKopperud Because scripts must be uniform. I can't search-replace scripts each time I download them from remote repository. It's counterproductive. – user1065145 Nov 11 '14 at 15:58
3

Add it to your PATH in .bash_profile or .bashrc:

export PATH=$PATH:/usr/custom/bin

This if you only want it for an specific user, if you want it for all users, you could add wget path to /etc/environment.

  • You have to remove wget from PATH. Only /usr/custom/bin/ has to be added. – rush Nov 11 '14 at 11:56
  • Fixed. You right. Copy/Paste... you know. – jherran Nov 11 '14 at 11:57
  • If you add it to .bashrc, it won't work if the script is launched from a login shell. If you add it to ~/.bash_profile, it won't work unless it was called from a login shell. If this needs to be run without the user having logged in (in a crontab or an init script for example), neither will work. Scripts do not read ~/.bashrc or ~/.bash_profile. They will inherit the $PATH from their parent shell but will ignore those files. – terdon Nov 11 '14 at 12:32
  • I can also add /etc/profile. – DisplayName Nov 11 '14 at 17:25
3

That is because shell do not support your env aliases by default.

There are two ways to solve this issue:

  1. use #!/bin/bash -i (in case of bash)

  2. add your /usr/custom/bin/ to PATH

2

You can call your script like this:

PATH=$PATH:/usr/custom/bin/ ./deploy.sh

With this, your PATH is only changed during running process of your script.

1

You should just extend your PATH in the script. That way other commands in that directory don't clobber your normal use of bash, and you don't have to retype it with every invocation

#!/bin/bash 

PATH=$PATH:/usr/custom/bin/

<rest of your script>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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