如何将自定义字符串作为argv [0]传递给程序

hax*_*hax 1 unix bash shell

我有一个在程序中使用argv [0]的C程序.我知道argv [0]是正在执行的程序的路径.我想将自定义字符串作为argv [0]传递给程序而不是程序名称.有没有办法在shell中执行此操作?

我读了一下exec命令.但我不确定用法.help exec说我必须通过exec -a <string>

  1. 有没有其他方法这样做?
  2. 如果我使用命令传递特殊字符或另一个文件的路径,是否有我需要使用的转义方法exec

澄清问题:

我正在运行一个程序prog1.要输入程序中的特定部分,我必须为程序提供一个SIGALRM.这个步骤本身很难,因为我不得不创建一个围绕条件的竞赛,以便在程序启动时发送信号.

while true;do ./prog1 2; done & while true; do killall -14 prog1; done 
Run Code Online (Sandbox Code Playgroud)

上面的while循环帮助我输入程序的一部分,程序的那部分argv[0]用于系统调用.这个系统调用是system(echo something argv[0])

有没有办法修改上面的while循环而;/bin/myprogram不是argv[0]. 底线: I need /bin/myprogram以特权prog1和输出执行.

ric*_*ici 5

exec -a 正是解决这个问题的方法.

我知道对作为参数传递的字符串没有任何限制exec.正常的shell引用应该足以传递你想要的任何东西(当然,只要它不包含嵌入的NUL字节).

问题exec是它命名命令替换当前shell.如果您只想运行命令,则需要生成要替换的新shell; 就像用括号括起命令一样简单:

$ ( exec -a '; /bin/myprogram' bash -c 'echo "$0"'; )
; /bin/myprogram
Run Code Online (Sandbox Code Playgroud)