在shell中导出函数

Sac*_*iya 85 shell export function

请告诉我如何在父shell(bash,sh或ksh)中导出函数,以便该函数可用于从父进程启动的所有子进程?

Pau*_*ce. 102

export -f功能特定于Bash:

#!/bin/bash
plus1 () { echo $(($1 + 1)); }
echo $(plus1 8)
export -f plus1
./child 14 21
Run Code Online (Sandbox Code Playgroud)

儿童

#!/bin/bash
echo $(plus1 $(($1 * $2)) )
Run Code Online (Sandbox Code Playgroud)

  • 导出功能仅适用于子呼叫?如何将其应用于当前的bash会话?喜欢.bashrc写,但只适用于当前的bash实例... (2认同)
  • @vp_arth:如果您不需要子调用中的函数,则无需导出它.它在当前会话中可用(请注意,如果它在文件中定义,则需要获取文件而不是运行它以使其在当前会话中可用). (2认同)

ano*_*nol 8

sh,它是能够导出功能,由查尔斯达菲指出.


iBu*_*Bug 5

函数本质上是不可导出的。不过你可以导出字符串,所以我这里有一个小技巧:

func="$(typeset -f funcname)"
export func
Run Code Online (Sandbox Code Playgroud)

要导入该函数,请从导出的字符串中重新定义它:

# in subshell
eval "$func"
Run Code Online (Sandbox Code Playgroud)