UNIX / solaris shell脚本shebang in include文件

时间:2017-01-25 09:23:43

标签: bash shell unix sh solaris

我有一个带有一堆全局函数的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行)吗?

谢谢!

2 个答案:

答案 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的代码都会出现问题。