使用源文件和 ./.sh 文件之间的区别

使用源文件和 ./.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和 `./之间的一些细微差别

问候

答案1

由于 shebang, 的结果#!/bin/sh,您正在使用sh而不是bash

source是一个 shell 内置函数,但对于您正在采购的脚本来说bash不是这样,它不存在于环境中,这会在您执行脚本时导致错误shsource./

有两种方法可以修复它:

  1. 将 shebang 更改为#!/bin/bash假设bash您的系统上有一个可用的 shell,并且可以在 中找到/bin

  2. 将最后一行更改为

    . environment-setup
    

.source与insh以及 inbash和其他一些 shell具有相同的功能。最好使用environment-source文件的绝对路径,以防它不在运行脚本的当前工作目录中,这样无论当时的 cwd 是什么,它都可以工作。

. /path/to/environment-setup

相关内容