Make

使用 source 和 ./ .sh 文件的區別

  • August 15, 2022

我知道上面的話題之前已經討論過

  • 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,bashsh對於您正在採購的腳本而言並非如此,source在環境中不存在,這會在您執行腳本時導致錯誤./

有兩種方法可以修復它:

  1. 將 shebang 更改為#!/bin/bash假設它bash是您系統上的可用 shell,並在/bin.
  2. 將最後一行更改為
. environment-setup

.``source具有與insh和 inbash以及其他一些 shell相同的功能。最好使用environment-source文件的絕對路徑,以防它不在執行腳本的目前工作目錄中,這樣無論當時的 cwd 是什麼,它都可以工作。

. /path/to/environment-setup

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