I have a script that looks like this
#!/bin/bash
function something() {
echo "hello world!!"
}
something | tee logfile
I have set the execute permission on this file and when I try running the file like this
$./script.sh
it runs perfectly fine, but when I run it on the command line like this
$sh script.sh
It throws up an error. Why does this happen and what are the ways in which I can fix this.
Running it as
./script.shwill make the kernel read the first line (the shebang), and then invoke bash to interpret the script. Running it assh script.shuses whatever shell your system defaultsshto (on Ubuntu this is Dash, which is sh-compatible, but doesn’t support some of the extra features of Bash).You can fix it by invoking it as
bash script.sh, or if it’s your machine you can change/bin/shto be bash and not whatever it is currently (usually just by symlinking it –rm /bin/sh && ln -s /bin/bash /bin/sh). Or you can just use./script.shinstead if that’s already working 😉If your shell is indeed dash and you want to modify the script to be compatible, https://wiki.ubuntu.com/DashAsBinSh has a helpful guide to the differences. In your sample it looks like you’d just have to remove the function keyword.