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

问题描述 投票:0回答:1

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

麻烦是,当通过shebang调用时,脚本本身作为参数传递给我的程序1.这是有问题的;我不希望我的命令解释器尝试处理从中调用的脚本。但在这种情况下,我看不出任何简单的方法。

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

如何判断我的程序是通过shebang调用的,还是知道跳过代表它所调用的脚本的参数?

shell argv shebang argc
1个回答
0
投票

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

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

所以我基本上担心两次处理内容。但只有第1项是真的;项目2没有发生(正如有问题的评论者在我的问题上指出的那样)。因此,如果C代码接受要作为第一个参数处理的文件的名称,并忽略以shebang开头的任何初始行,那么所有这些都是正确的。

© www.soinside.com 2019 - 2024. All rights reserved.