在echo指令中使用的转义“ system()内部调用

时间:2018-07-30 12:05:12

标签: c shell raspberry-pi

问题如下:

我有一个任务是在 Raspberry Pi 上编写石英时钟驱动程序,该驱动程序应允许并发访问以进行读取/写入。因此,我使用信号量来阻止访问。

现在我想测试一下,因此我必须运行

sudo hwclock -r -f ...

我的想法是用C编写一个程序以使该测试自动进行,并使用fork来并行运行访问。但是我无法以超级用户身份运行该程序,因为我对 Pi 没有这些权限。

我想做的是:

system("echo pass\"word | sudo -S hwclock --set --date \"7/20/37 12:00:00\" -f /dev/<device>");

system("echo pass\x22word | sudo -S hwclock --set --date \"7/20/37 12:00:00\" -f /dev/<device>");

都给我错误

sh: 1: Syntax error: Unterminated quoated string

使用“密码” 而不是“ pass \”单词” 运行程序可以正常工作。

所以我需要某种方式让程序“输入” 为我提供密码。

希望有人可以帮助我解决这个问题或为我指明正确的方向。 感谢其他完成测试的方法。

1 个答案:

答案 0 :(得分:4)

使用"pass\"word"时,您只对C字符串的双引号进行了转义,但在外壳程序中仍未转义。这意味着您尝试执行echo pass"word,它的确是一个未终止的字符串。

您还需要在正在执行的shell命令中转义双引号,例如"pass\\\"word"。这就是外壳中的命令echo pass\"word