Make
使用 source 和 ./ .sh 文件的區別
我知道上面的話題之前已經討論過
source
.sh 文件,並在完成 sh 文件後保留環境變數- 而
./
.sh 文件,完成後您會失去環境變數但是,我有以下腳本,
makefile.sh
#!/bin/sh echo $(pwd) export PATH=$PATH:$PWD ## source the environment source environment-setup
當我
source
使用上述文件時,即使沒有導出 PATH,它也能成功通過。但是,當我使用./
上述文件時,它給了我./makefile.sh: 7: ./makefile.sh: source: not found
.我已經放置
environment-setup
在與makefile.sh
. 我們需要做更多的事情嗎?還是我錯過了source
和 `./之間的一些細微差別問候
由於 shebang,
#!/bin/sh
,您正在使用sh
而不是bash
.
source
是一個內置的 shell,bash
但sh
對於您正在採購的腳本而言並非如此,source
在環境中不存在,這會在您執行腳本時導致錯誤./
有兩種方法可以修復它:
- 將 shebang 更改為
#!/bin/bash
假設它bash
是您系統上的可用 shell,並在/bin
.- 將最後一行更改為
. environment-setup
.``source
具有與insh
和 inbash
以及其他一些 shell相同的功能。最好使用environment-source
文件的絕對路徑,以防它不在執行腳本的目前工作目錄中,這樣無論當時的 cwd 是什麼,它都可以工作。. /path/to/environment-setup