我有一个带有一堆全局函数的functions.sh脚本,我希望在其他脚本中使用它们。这个函数脚本是用bash(#!/ bin / bash)
编写的多年来编写了很多脚本,所以旧版本或#!/ bin / sh(与solaris中的#!/ bin / bash不同)。
我的问题是,当你从sh(非bash)脚本中调用functions.sh文件(带./path/to/functions.sh)时," functions.sh&的shebang行#34;解释?
简而言之,你能从另一个shell类型的脚本调用一个bash编写的函数脚本(两者中都有适当的shebang行)吗?
谢谢!
答案 0 :(得分:3)
只要您想使用源脚本所需的功能而不是执行它
source /path/to/functions.sh
或根据POSIX
标准,执行
. ./path/to/functions.sh
来自sh
脚本,这相当于在运行命令的位置包含文件中function.sh的内容。
您需要了解采购和执行脚本之间的区别。
Sourcing 从脚本所在的父shell运行脚本 调用;所有环境变量,函数都保留到 parent-shell终止(终端关闭,或变量 重置或取消设置),
执行从父shell和那些变量,函数分配新shell 包括你的导出变量只保留在子shell中 环境并在脚本终止时销毁。
答案 1 :(得分:1)
当您获取文件时,该文件中的shebang将被忽略(它不在第一行,因为它包含在调用者脚本中并被视为注释)。
当您包含一个带有#!/bin/sh
的旧脚本时,它将作为调用者的shell处理。用/bin/sh
编写的大多数内容都适用于bash
当您运行sh或ksh脚本并且包含(source
)bash文件时,所有特定于bash的代码都会出现问题。