Bash - How to call a function declared in a parent

2020-02-04 02:53发布

问题:

I am writing a bash script that calls functions declared in the parent shell, but it doesn't work.

For example:

$ function myfunc() { echo "Here in myfunc" ; }
$ myfunc
Here in myfunc
$ cat test.sh 
#! /bin/bash

echo "Here in the script"
myfunc
$ ./test.sh 
Here in the script
./test.sh: line 4: myfunc: command not found
$ myfunc
Here in myfunc

As you can see the script ./test.sh is unable to call the function myfunc, is there some way to make that function visible to the script?

回答1:

Try

$ export -f myfunc

in the parent shell, to export the function.



回答2:

@OP, normally you would put your function that every script uses in a file, then you source it in your script. example, save

function myfunc() { echo "Here in myfunc" ; }

in a file called /path/library. Then in your script, source it like this:

#!/bin/bash
. /path/library
myfunc


回答3:

This also works but I noticed ${0} takes parent's value: Maybe more useful if you don't want to have a bunch of export calls in your scripts.

script1:

#!/bin/bash

func()
{
  echo func "${1}"
}

func "1"
$(. ./script2)

script2:

#!/bin/bash

func "2"

Output:

[mymachine]# ./script1
func 1
func 2


标签: bash unix shell