【问题标题】:Using bash system calls in C to write C that makes bash system calls在 C 中使用 bash 系统调用来编写进行 bash 系统调用的 C
【发布时间】:2012-10-21 21:21:46
【问题描述】:

我正在玩一个小应用程序(用 C 语言),它在运行时会创建一个目录树,并用文件填充该目录树。它通过使用一系列格式为

的行来做到这一点

system("echo \"lump = \" >> ./newdirectory/newfile.c");

这工作正常,除了当我尝试让它将一行 C 写入新文件时,该文件本身包含一个 system("echo"); 调用。

具体来说,

system("echo \"system(\"echo hello world\");\" >> ./newdirectory/newfile.c");

写成

system(echo hello world);

【问题讨论】:

  • 可以做你想做的事,但从长远来看,如果你学习如何直接从 C 语言创建文件而不是乱搞system,你会更快乐。或者,您可以编写一个常规的旧 shell 脚本,而不是把它打扮成 C 服装。
  • 同意;这更像是一个练习,而不是一个实际的项目。我想我真正的好奇心就是我对转义字符做错了什么。

标签: c bash escaping echo system-calls


【解决方案1】:

由于您希望转义字符按原样显示,因此您也需要对它们进行转义。是的,您可以转义转义字符。比如:

"\\\""

这导致输出\,后跟"。

【讨论】:

  • system("echo \"system(\\\"echo hello world\\\");\" >> ./newdirectory/newfile.c");
  • @elempenguin 谢谢。不要忘记实际“接受”解决您问题的答案。
  • 一个弹出框告诉我,我可以在 2 分钟内接受你的回答。
【解决方案2】:

这是一场疯狂的比赛。 但我认为,这种疯狂的正确方法是编写 C 函数来转义字符串。

内部字符串必须双转义。

system("echo \"system(\\\"echo hello world\\\");\" >> ./newdirectory/newfile.c");

其他第一个 C unescape 文字字符串和 shell 获取

echo "system("echo hello world");" >> ./newdirectory/newfile.c

echo 中的错误引号没有转义。

【讨论】:

    猜你喜欢
    • 2012-04-29
    • 2016-02-09
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 2023-03-10
    相关资源
    最近更新 更多