如何判断我的C程序是否通过shebang调用了?

时间:2019-03-13 04:16:52

标签: shell argv shebang argc

我构建了一个小命令解释器(在C ++中),可以直接调用,也可以通过shebang(#!)在脚本中调用。它可以在命令行中接受参数(在我的代码中显示为argc / argv)。

麻烦是,当通过shebang调用时,脚本本身会作为参数1传递给我的程序。我不希望我的命令解释器尝试处理从其调用的脚本。但是我看不出有什么简单的方法可以告诉您何时是这种情况。

编辑:例如,如果我有一个名为“ test”的脚本,它以#!/ usr / local / bin / miniscript开头,然后以的形式调用。/test--help -c -foo ,我在C代码中得到了5个参数:/ usr / local / bin / miniscript,。/ test,-help,-c和-foo。如果直接调用它,则会得到四个参数:/ usr / local / bin / miniscript,--help,-c和-foo

如何知道我的程序是何时通过shebang调用的,或者如何知道跳过表示调用它的脚本的参数?

1 个答案:

答案 0 :(得分:0)

我的问题是基于错误的假设。我相信通过shebang调用程序时发生了两件事:

  1. 该程序的路径作为第一个参数传递。
  2. 该程序的内容已通过管道传递到stdin。

因此,我本质上担心要对内容进行两次处理。但是只有第1项是正确的;项目2不会发生(正如我的问题的有用评论者所指出的)。因此,如果C代码接受要处理的文件名作为第一个参数,而忽略以shebang开头的任何初始行,那么一切就对了。