终端无法识别 shell 脚本命令

终端无法识别 shell 脚本命令

我有一个 shell 脚本可以更新我系统上的代理设置。

chmod +x filename.sh我尝试运行成功运行的命令。然后我./filename.sh在终端上运行也运行成功。这个 shell 脚本包含一些辅助方法,当我尝试运行时,它会显示-bash: unload_proxy: command not found. 在此输入图像描述

在此输入图像描述

答案1

如果filename.sh包含 的定义unload_proxy,则需要使用source ./filename.sh或 的快捷方式. ./filename.sh

获取文件会导致它在当前 shell 环境中进行评估,从而让它定义新函数。

在您的示例中,您直接运行该文件*(即没有来源),事件的顺序如下:

  1. 创建一个新的 bash shell,其中包含一个新环境,出于本说明的目的,该环境或多或少是当前 shell 的副本(取决于某些选项和定义事物的方式)。

  2. 该脚本在这个新 shell 中运行,并在其环境中定义函数。

  3. 脚本结束,其中定义的函数的新 shell 也结束。

  4. 控制权返回到原始 shell,其中未定义任何函数。

当以 身份运行时source ./filename.sh,不会启动新的 shell,因此只会发生步骤 2,并且它发生在您当前的 shell 中。

* 假设文件有正确的舍邦, 例如#!/usr/bin/env bash

相关内容