我在Mac OSX上有一个脚本,该脚本在打开新终端时执行。它在.zprofile
中指定。它有一个bash shebang,但是它仍然使用zsh(我的默认shell)执行。这里可能是什么问题?
#!/bin/bash
核心问题是由于zsh语法的差异,我无法执行脚本。当我分析可能导致这种情况的原因时,我意识到shebang只是被忽略了。
我有一个/ bin / bash二进制文件。
编辑:
~/.zprofile
像这样执行脚本:
. ~/.script.bash
答案 0 :(得分:5)
您已经在~/.zprofile
中写了以下行:
. ~/.script.bash
这类似于
source ~/.script.bash
这意味着您的脚本是源文件,并且没有执行。您应该有类似的内容:
~/.script.bash
相反,它将在shebang定义的环境中执行。请注意,该文件必须是可执行文件。
. file [ arg ... ]
:从file
读取命令并在当前外壳环境中执行它们。来源:
man zshall
答案 1 :(得分:2)
当“来源”脚本文件(即. <script-file-name>
)时,文件中的命令将使用当前Shell的语法在当前Shell中执行。文件中的任何“ shebang”行都将解释为shell注释,并被忽略。
如果可以通过执行脚本文件中的shell命令来运行该文件,则可以将其设为可执行文件并作为命令运行。
但是,当您执行Shell脚本时,执行将在子进程中进行。这意味着需要更改当前外壳程序/进程状态的操作将无法正常工作。像这样的东西:
如果您需要执行此类操作,则别无选择,只能将bash
脚本转换为zsh
脚本,以便可以在zsh
中“获取”该脚本。