我知道上面的话题之前已经讨论过
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
和 `./之间的一些细微差别
问候
答案1
由于 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