我想了解一些要点:我有一个用 bash 语法编写的脚本,不包含 shebang 行 (#!/bin/bash),我的默认 shell 是 tcsh。
- 当向文件授予执行权限并通过键入文件的完整路径在默认 shell (tcsh) 中运行它时,它会正确运行。脚本如何在 tcsh 中正确运行而不输入 shebang 行?
- 对于默认 shell tcsh 中的同一个文件,如果我使用 source 命令来运行它,它会给出语法错误(即使我使用了 shebang bash 行),为什么?
经过一番试验后,我发现了以下内容:谢谢,这似乎是正确的我做了一些试验并达到了以下目标: - 使用源(点运算符仅在 bash 中是别名)命令来运行文件: - 即使没有执行权限也执行它- 使用当前 shell 运行它,而不考虑 shebang 行 - 如果 shebang 行存在并且通过键入其名称(总路径)运行文件(此处需要执行权限),则使用 shebang 行中的 shell 运行该文件。如果 shebang 行不存在并且按名称运行,则在我的情况下始终使用 bash,无论当前 shell 是什么。我不知道为什么,是因为 bash 在 /bin 文件中排在第一位吗??????你能和我核实一下吗
答案1
如果可执行脚本没有 shebang 行,则由 执行/bin/sh
。如果您用来source
执行它,它将在当前 shell 中运行:
$ cat s.sh
echo "shell=$shell"
echo "BASH=$BASH"
$ ./s.sh
shell=
BASH=/usr/local/bin/bash
$ tcsh
[~]% ./s.sh
shell=
BASH=/bin/sh
[~]% source s.sh
shell=/bin/tcsh
BASH: Undefined variable.