我有一个 C 程序,它在程序中使用 argv[0]。我知道argv[0]是正在执行的程序的路径。我想将自定义字符串作为 argv[0] 传递给程序而不是其程序名称。有没有办法在 shell 中做到这一点?
我读到了有关 exec 命令的内容。但我不确定用法。 help exec
说我必须通过exec -a <string>
- 还有其他方法可以做到这一点吗?
- 如果我使用
exec
传递特殊字符或另一个文件的路径,是否需要使用任何转义方法?命令?
澄清问题:
我正在运行一个程序prog1
。要进入程序中的特定部分,我必须给出 SIGALRM
到程序。这一步本身很困难,因为我必须创建一个围绕条件的竞争,以便在程序启动时立即发送信号。
while true;do ./prog1 2; done & while true; do killall -14 prog1; done
上面的while循环帮助我进入程序部分,该部分程序使用argv[0]
用于系统调用。这个系统调用是system(echo something argv[0])
有没有办法修改上面的while循环并放入;/bin/myprogram
而不是argv[0]
。
底线: I need /bin/myprogram
以 prog1
的权限执行以及它的输出。
最佳答案
exec -a
正是解决这个问题的方法。
据我所知,作为参数传递给 exec
的字符串没有任何限制。正常的 shell 引用应该足以传递您想要的任何内容(当然,只要它不包含嵌入的 NUL 字节)。
exec
的问题是它用指定的命令替换当前的 shell。如果你只是想运行一个命令,你需要生成一个新的 shell 来替换;这就像用括号括住命令一样简单:
$ ( exec -a '; /bin/myprogram' bash -c 'echo "$0"'; )
; /bin/myprogram
关于bash - 如何将自定义字符串作为 argv[0] 传递给程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40028185/