我有一个在程序中使用argv [0]的C程序.我知道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
Run Code Online (Sandbox Code Playgroud)
上面的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
Run Code Online (Sandbox Code Playgroud)