You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Shebang解释器中获取原始的argv[0]参数

Shebang解释器无法获取原始argv[0]的问题

我正在编写一个用作Shebang解释器的程序,当执行带有#!/usr/bin/my-program的脚本文件some-file时,我的程序启动后argv[0] = /usr/bin/my-program、argv[1] = /path/to/some-file,但无法获取到原始的argv[0](即some-file)。即使通过exec -a fake some-file或execv("some-file", ["fake"])执行,argv[0]始终为我的程序路径,完全找不到fake的踪迹。

为测试该问题,我编写了一个打印参数的简单程序:

#include <stdio.h>
// print-args.c
int main(int argc, char **argv) {
  for (int i = 0; i < argc; i++) {
    printf("argv[%d]: %s\n", i, argv[i]);
  }
}

执行以下测试步骤:

gcc print-args.c -o print-args
echo "#!$PWD/print-args" > test-shebang
chmod +x test-shebang 
strace -e trace=process -f --argv0 fake ./test-shebang

得到的输出为:

execve("./test-shebang", ["fake", "a"], 0x7ffc76487480 /* 64 vars */) = 0
argv[0]: path/to/print-args
argv[1]: ./test-shebang

我还检查了/proc/self/cmdline,其中的argv数组内容也完全一致。

内容的提问来源于stack exchange,提问作者everett1992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 19:27:04