Linux

終端無法辨識 shell 腳本命令

  • January 30, 2020

我有一個 shell 腳本,可以更新我係統上的代理設置。

我嘗試執行成功執行的命令chmod +x filename.sh。然後我在./filename.sh也成功執行的終端上執行。這個 shell 腳本包含一些輔助方法,當我嘗試執行它時會說-bash: unload_proxy: command not found在此處輸入圖像描述

在此處輸入圖像描述

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

獲取文件會導致它在目前 shell 的環境中進行評估,從而讓它定義新的函式。

在您的範例中,您直接執行文件*(即沒有採購),事件順序如下:

  1. 一個新的 bash shell 被創建,一個新的環境,為了這個解釋的目的,或多或少是目前 shell 的副本(取決於某些選項和定義事物的方式)。
  2. 該腳本在這個新的 shell 中執行,並在其環境中定義函式。
  3. 腳本結束,其中定義了函式的新 shell 也結束了。
  4. 控制權返回到您的原始 shell,其中沒有定義任何函式。

當 run as 時source ./filename.sh,不會啟動新的 shell,因此只發生第 2 步,並且它發生在您目前的 shell 中。

  • 假設文件有適當的shebang,例如#!/usr/bin/env bash

引用自:https://unix.stackexchange.com/questions/564941