执行脚本时如何将参数传递给shebang解释器?

ber*_*ret 2 shebang

说我有my.script这样的

#!/bin/bash

blah
blah
Run Code Online (Sandbox Code Playgroud)

并且 bash 解释器接受一个--verbose参数。

如何执行 my.script 传递 --verbose 到 bash?

我知道我可以在命令行上执行 bash --verbose my.script ,但我需要能够my.script直接运行。

编辑:

好吧,也许我应该描述一下我的确切例子。我正在使用 grunt.js 构建系统,其 cli 是一个带有 #! 到节点。现在,grunt 运行插件,我使用的一个这样的插件需要在节点上启用某个标志。grunt cli 脚本不会这样做,我不想更改它。

Ste*_*itt 7

您可以添加--verbose到shebang行:

#!/bin/bash --verbose
Run Code Online (Sandbox Code Playgroud)

如果您在 Linux 上运行它,由于内核处理 shebang 行的方式,您只能以这种方式添加一个参数。在 shell 脚本中,您可以使用set;来控制某些 shell 选项。在这种情况下

#!/bin/bash

set -o verbose

blah
blah
Run Code Online (Sandbox Code Playgroud)

(虽然这只会set在行后显示命令,而--verbose在 shebang 行中显示所有命令,包括 shebang。)

  • @beret:如果不想修改脚本,可以包装一下;将其重命名为其他名称(比如`script.real`)并创建一个新的`script`,它调用`bash --verbose script.real`。如果您将两个脚本放在同一目录中,您可以使用 `base --verbose $(dirname $0)/script.real` 来避免路径问题。 (3认同)
  • @贝雷帽:这是一个非常重要的方面,目前没有解决。 (2认同)