Linux Script Error: Bad Substitution (change shell from dash to bash)
This is a simple problem in the end that cost me serious troubleshooting time. Hopefully you found this article and it can save you some of what I lost.
You may encounter a problem when running a script on the Linux CLI that results in error: bad substitution
and a failed script run.
This may be due to your distro using dash
as the shell instead of bash
and more importantly, that sh
may link to dash
which can mess you up further.
First check on your shell with: echo $SHELL
which will display your current users shell. If this shows bash
you’re likely okay there, if it does not, then you may need to update your user’s shell by issuing a command like usermod --shell /bin/bash <username>
.
Next, if your last check was okay, you need to find out where sh
is pointing so run readlink -f $(which sh)
or ls -al /bin/sh
either should give you the information you need.
If you find that the previous results show some form of path to dash
then you may need to update it. Especially if it is a symlink (which it probably is) that shows something like this:
root@server:~# ls -al /bin/sh
lrwxrwxrwx 1 root root 4 Oct 26 01:39 /bin/sh -> dash
If you see the above symlink you’re likely going to have to manually delete and recreate the symlink pointing to bash as follows (remember to use sudo
if you are not running the command as root):
rm /bin/sh
ln -s /bin/bash /bin/sh
Once you’ve knocked this out your scripts should once again run as expected.
0 Comments