我有一个包含许多函数的 bash 脚本。我希望这个脚本使用 bash 运行。该脚本的顶部有:
echo "BASH_VERSION""$BASH_VERSION"
echo "ZSH_VERSION""$ZSH_VERSION"
目前我可以看到脚本在 ZSH 中运行。
如何让脚本使用 bash 运行?我已经#!/usr/bin/env bash
在文件顶部但它仍然不起作用。我在用着source
。
答案1
如果您使用 运行脚本source
,则脚本文件中的命令将由 和 执行当前的shell 环境,无论#!
脚本的 -line 说什么(该行只是注释,在这种情况下将被忽略)。这就是作用source
。
如果通过在命令行上给出脚本的路径和名称(例如,)来运行脚本,则假设该文件是可执行的,它将由脚本开头的 -line./myscript
中提到的解释器运行#!
。文件中的函数定义和变量等在脚本运行期间将处于活动状态,但在脚本终止时将与脚本环境的其余部分一起被销毁。
如果脚本文件包含您想要在当前 shell 环境中访问的函数的定义zsh
,并且文件中的函数是以与 shell 兼容的方式编写的zsh
,那么采购它就是合适的做法。
如果函数是为bash
shell 显式编写的(使用bash
特定变量等),那么您可能希望将应用程序的其余部分编写为单独的bash
脚本,并从该脚本中使用函数获取文件。或者,您可能希望重写 shell 的函数zsh
,然后在zsh
shell 中获取重写的函数定义。