为什么这个 shell 脚本会失败,如果它在我将每一行输入到终端时有效?

Why does this shell script fail, if it works when I enter each line into a terminal?

我制作了一个简短的 shell 脚本,它是这样的:

#!/bin/sh

PROJECT_NAME="my_project"

mkdir $PROJECT_NAME
cd $PROJECT_NAME
python3 -m venv beeware-venv
source beeware-venv/bin/activate
python3 -m pip install briefcase
briefcase new

当我用sh create_new_beeware_project运行这个脚本时,第一行失败是source beeware-venv/bin/activate;我得到的错误是 'source: not found'。但是,如果我将每一行逐行输入终端,一切正常

这本身并不是什么大问题;最终,我只能手动输入命令。但是 这让我觉得 shell 脚本中有一些我不理解的重要内容,如果可能的话,我希望有人向我解释一下。

涉及两个 shell:您的交互式 shell,可能 bash,以及 /bin/sh,您系统的默认 POSIX shell。 source. 的非标准别名,您的 /bin/sh 无法识别。请改用 .

#!/bin/sh

PROJECT_NAME="my_project"

mkdir "$PROJECT_NAME" || exit 1
cd "$PROJECT_NAME"
python3 -m venv beeware-venv
. beeware-venv/bin/activate
python3 -m pip install briefcase
briefcase new