I\'m trying to run a bash script
on my Ubuntu machine and it is giving me an error:
function not found
To test, I
Doesn't it require () after function name, or at the call?
function sayIt() { ...
}
sayIt()
? :)
Hmm, actually, on MY mac, it works just as you pasted..
dtpwmbp:~ pwadas$ cat aa.sh
#!/bin/bash
function sayIt() {
echo "hello world"
}
sayIt
dtpwmbp:~ pwadas$ ./aa.sh
hello world
dtpwmbp:~ pwadas$
Compare bash version, AFAIR some older version required "()"s.
dtpwmbp:~ pwadas$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin12)
Copyright (C) 2007 Free Software Foundation, Inc.
dtpwmbp:~ pwadas$
Also compare state of shopt options ( man bash ), on both shells, maybe one of them have some compat syntax turned on or off ? "shopt" command without args will list state of options supported.
What is the 'function' keyword used in some bash scripts?
I faced the same problem, I then modified the syntax and it worked for me. Try to remove the keyword function and add brackets () after the function name.
#!/bin/bash
sayIt()
{
echo "hello world"
}
sayIt
ls -la /bin/sh
check the sym link where it point to bash or dash
Chances are that on your desktop you are not actually running under bash
but rather dash
or some other POSIX-compliant shell that does not recognize the function
keyword. The function
keyword is a bashism, a bash extension. POSIX syntax does not use function
and mandates the use of parenthesis.
$ more a.sh
#!/bin/sh
function sayIt {
echo "hello world"
}
sayIt
$ bash a.sh
hello world
$ dash a.sh
a.sh: 3: function: not found
hello world
a.sh: 5: Syntax error: "}" unexpected
The POSIX-syntax works in both:
$ more b.sh
#!/bin/sh
sayIt () {
echo "hello world"
}
sayIt
$ bash b.sh
hello world
$ dash b.sh
hello world