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

标签 bash shell unix

我有一个 C 程序,它在程序中使用 argv[0]。我知道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 

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

有没有办法修改上面的while循环并放入;/bin/myprogram而不是argv[0]底线: I need /bin/myprogramprog1 的权限执行以及它的输出。

最佳答案

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/

相关文章:

linux - 使用AWK删除与html标签匹配的字符(不是正则表达式)

c++ - 从用户读取整数并写入子管道,然后从中读取父管道

shell - 如何定期保存程序输出的最后一行?

linux - 如何使用 bash 脚本在远程机器上运行命令?

linux - 日期时间到纪元的转换

bash - 即使状态代码为 400,如何从 curl 请求输出到文件?

c - 在这种情况下,SIGCHILD信号将如何处理?

linux - 如何将 if 语句放入 lftp block 中

linux - 使用shell脚本删除文件夹内容

linux - 来自 shell 脚本的后台 rsync 和 pid