答案1
如果filename.sh
包含 的定义unload_proxy
,则需要使用source ./filename.sh
或 的快捷方式. ./filename.sh
。
获取文件会导致它在当前 shell 环境中进行评估,从而让它定义新函数。
在您的示例中,您直接运行该文件*(即没有来源),事件的顺序如下:
创建一个新的 bash shell,其中包含一个新环境,出于本说明的目的,该环境或多或少是当前 shell 的副本(取决于某些选项和定义事物的方式)。
该脚本在这个新 shell 中运行,并在其环境中定义函数。
脚本结束,其中定义的函数的新 shell 也结束。
控制权返回到原始 shell,其中未定义任何函数。
当以 身份运行时source ./filename.sh
,不会启动新的 shell,因此只会发生步骤 2,并且它发生在您当前的 shell 中。
* 假设文件有正确的舍邦, 例如#!/usr/bin/env bash