Linux
終端無法辨識 shell 腳本命令
我有一個 shell 腳本,可以更新我係統上的代理設置。
我嘗試執行成功執行的命令
chmod +x filename.sh
。然後我在./filename.sh
也成功執行的終端上執行。這個 shell 腳本包含一些輔助方法,當我嘗試執行它時會說-bash: unload_proxy: command not found
。
如果
filename.sh
包含 的定義unload_proxy
,則需要使用source ./filename.sh
或 的快捷方式. ./filename.sh
。獲取文件會導致它在目前 shell 的環境中進行評估,從而讓它定義新的函式。
在您的範例中,您直接執行文件*(即沒有採購),事件順序如下:
- 一個新的 bash shell 被創建,一個新的環境,為了這個解釋的目的,或多或少是目前 shell 的副本(取決於某些選項和定義事物的方式)。
- 該腳本在這個新的 shell 中執行,並在其環境中定義函式。
- 腳本結束,其中定義了函式的新 shell 也結束了。
- 控制權返回到您的原始 shell,其中沒有定義任何函式。
當 run as 時
source ./filename.sh
,不會啟動新的 shell,因此只發生第 2 步,並且它發生在您目前的 shell 中。
- 假設文件有適當的shebang,例如
#!/usr/bin/env bash