运行脚本文件中定义的函数时找不到命令

vai*_*v.g 5 bash shell

我在 bash_profile 文件中定义了一个函数。

pse(){
ps -ef|grep $1
}
Run Code Online (Sandbox Code Playgroud)

现在我可以从命令行调用这个函数。喜欢

pse kafka
Run Code Online (Sandbox Code Playgroud)

它工作正常,因为我可以看到正确的输出。但是当我尝试在脚本文件中调用 pse 函数时,它向我显示“命令未找到”错误。我错过了什么吗?我们是否不允许从 shell 脚本调用 bash_profile 中定义的函数?操作系统:MacOSX 优胜美地

P.P*_*.P. 4

您可以export从父进程的 shell 中使用该函数,使其在子进程中可用:

export -f pse
Run Code Online (Sandbox Code Playgroud)

从手册中:

出口

export [-fn] [-p] [name[=value]]
Run Code Online (Sandbox Code Playgroud)

标记要传递给环境中子进程的每个名称。如果提供了 -f 选项,则名称引用 shell 函数;否则,名称引用 shell 变量。-n 选项意味着不再标记每个名称以供导出。如果未提供名称,或者给出了 -p 选项,则显示所有导出变量的名称列表。-p 选项以可重复用作输入的形式显示输出。如果变量名后跟=value,则变量的值设置为value。

返回状态为零,除非提供了无效的选项、名称之一不是有效的 shell 变量名称,或者 -f 提供的名称不是 shell 函数。

  • `source` 仅在当前 shell 中“包含”(运行)该函数。`export` 使其在所有子进程中可用。所以你在这里两者都需要。或者您可以直接在脚本中“获取”它。 (3认同)