我们是否需要在文件中定义仅包含函数的 shell?

我们是否需要在文件中定义仅包含函数的 shell?

我想知道我们是否需要添加 shell 标题:

#!/bin/bash

在脚本 上second.sh,它仅定义一个函数,并从另一个脚本 调用script.sh

例如,script.sh包含

#!/bin/bash

source second.sh

func1 "make amerika great again "

echo $I_AM_SAY

并且second.sh仅包含从第一个脚本调用的函数:

X=soon

function func1 {
   fun=$1
I_AM_SAY=$fun$X
}

我们是否需要定义second.sh为:

#!/bin/bash
X=soon

function func1 {
   fun=$1
I_AM_SAY=$fun$X
}

或作为:

#!/usr/bin/env bash

X=soon

function func1 {
   fun=$1
I_AM_SAY=$fun$X
}

答案1

不,你不需要 shebang 行:正在运行的 shell 直接获取脚本,它不会启动一个新的 shell(这是获取脚本的全部意义),因此它和内核都不需要知道哪个 shell用于运行它。

如果您想完全阻止second.sh脚本被调用,您可以添加

#!/usr/bin/false

舍邦线。

答案2

如果您仅使用source另一个脚本中的文件,则 hashbang 不会被解释(它只是那里的注释)。不过,它可以作为读者的注释,提醒他们该脚本使用特定于特定 shell 的功能。当然,您也应该在注释中以纯文本形式提及这一点,因为无论如何,您确实在文件顶部附近的注释中对脚本进行了描述,对吧?

相关内容