我试图实现由不同用户写入文件,root
如下所示。但是文件已创建,但没有写入任何内容。
system("(echo 'ab' | su - root -c "echo 'Logging Enabled' |tee myLog.txt")>/dev/null");
也尝试过>
而不是tee
system("(echo 'ab' | su - root -c "echo 'Logging Enabled' > myLog.txt")>/dev/null");
有没有更好的方法来实现这个目标?
谢谢
答案1
从您的问题中不清楚您实际希望在文件中出现哪些文本。
在 shell 中,你可以这样做
echo 'ab' | sudo tee myLog.txt
将“ab”写入myLog.txt
并显示在标准输出上。使用的原因tee
通常是因为它的副作用,这样你就不必以特权用户身份运行 shell,并且标准输出的输出实际上并不是所需要的;所以你可以添加一个重定向来抑制它。
echo 'ab' | sudo tee myLog.txt >/dev/null
在一个系统(3)在 C 代码中调用,您可以简单地将其放入字符串中:
system("echo 'ab' | sudo tee myLog.txt >/dev/null");
以下基本上是未定义的:
echo 'ab' | echo 'Logging enabled'
但通常会简单地丢弃“ab”,因为第二个echo
不会对它执行任何操作,而是产生自己的输出。如果您想组合两段文本,请尝试类似的操作
printf "%s\nLogging enabled\n" "$(echo ab)"
但同样,非常不清楚您想对这两个单独的echo
语句做什么以及如果是的话如何处理。
(重申一下显而易见的事实,a | b
将标准输出连接到a
的标准输入b
,并并行运行两个进程,标准输入仍然连接到 的标准输入a
和来自 的标准输出b
。)