Bash shebang被忽略 - 脚本仍然使用zsh执行

Odd*_*Dev 2 macos zsh shebang

我在Mac OSX上有一个脚本,在打开一个新终端时执行.它在.zprofile.中指定.它有一个bash shebang但它仍然使用zsh(我的默认shell)执行.这可能是什么问题?

#!/bin/bash
Run Code Online (Sandbox Code Playgroud)

核心问题是由于zsh语法的不同,我无法执行脚本.当我分析可能导致这种情况的原因时,我认识到shebang只是被忽略了.

我有一个二进制/ bin/bash btw.

编辑:

~/.zprofile 像这样执行脚本:

. ~/.script.bash
Run Code Online (Sandbox Code Playgroud)

kva*_*our 5

你写~/.zprofile了以下这一行:

. ~/.script.bash
Run Code Online (Sandbox Code Playgroud)

这类似于

source ~/.script.bash
Run Code Online (Sandbox Code Playgroud)

这意味着您的脚本是来源而非执行.你应该有类似的东西:

~/.script.bash
Run Code Online (Sandbox Code Playgroud)

相反,它将在shebang定义的环境中执行.请注意,该文件需要是可执行的.

. file [ arg ... ]:从当前 shell环境中读取命令file并执行它们.

资源: man zshall

  • 另一方面,如果脚本*需要获取(为当前会话设置shell或环境变量),那么它需要用`zsh`编写,而不是`bash`,而shebang是不必要的. (5认同)