#define SHELLSCRIPT "\
#/bin/bash \n\
awk 'BEGIN { FS=\":\"; print \"User\t\tUID\n--------------------\"; } { print $1,\"\t\t\",$3;} END { print \"--------------------\nAll Users and UIDs Printed!\" }' /etc/passwd \n\
"
void displayusers()
{
system(SHELLSCRIPT);
}
错误消息为:
awk: line 1: runaway string constant "User...
bash cmd运行并在终端中运行时是:
awk 'BEGIN { FS=":"; print "User\t\tUID\n--------------------"; } { print $1,"\t\t",$3;} END { print "--------------------\nAll Users and UIDs Printed!" }' /etc/passwd
我觉得在使用\
阻止各种"
来解决这个问题时,某些地方搞砸了我的问题。但我不知道在哪里。想法?
答案 0 :(得分:1)
我只是把你的字符串用在printf()
语句中,然后分析输出:
#include <stdio.h>
#define SHELLSCRIPT "\
#/bin/bash \n\
awk 'BEGIN { FS=\":\"; print \"User\t\tUID\n--------------------\"; } { print $1,\"\t\t\",$3;} END { print \"--------------------\nAll Users and UIDs Printed!\" }' /etc/passwd \n\
"
int main(void)
{
printf("[[%s]]\n", SHELLSCRIPT);
return 0;
}
示例运行:
$ ./runaway
[[#/bin/bash
awk 'BEGIN { FS=":"; print "User UID
--------------------"; } { print $1," ",$3;} END { print "--------------------
All Users and UIDs Printed!" }' /etc/passwd
]]
$
当我使行结束可见时(^J
标记行尾^I
标签),问题是透明的:
[[#/bin/bash ^J
awk 'BEGIN { FS=":"; print "User^I^IUID^J
--------------------"; } { print $1,"^I^I",$3;} END { print "--------------------^J
All Users and UIDs Printed!" }' /etc/passwd ^J
]]^J
字符串中有两次出现\n
,需要\\n
。您是否将\t
的外观更改为\\t
,由您决定;无论哪种方式都可以。
#define SHELLSCRIPT "\
#/bin/bash\n\
awk 'BEGIN { FS=\":\"; print \"User\t\tUID\\n--------------------\"; } { print $1,\"\t\t\",$3;} END { print \"--------------------\\nAll Users and UIDs Printed!\" }' /etc/passwd\n"
在我的程序中使用它会产生:
[[#/bin/bash^J
awk 'BEGIN { FS=":"; print "User^I^IUID\n--------------------"; } { print $1,"^I^I",$3;} END { print "--------------------\nAll Users and UIDs Printed!" }' /etc/passwd^J
]]^J
请注意,特别是用于调试此技术的技术。打印数据,以便您可以准确地看到它。
答案 1 :(得分:0)
尚未经过测试,但这是一篇看似有用的文章just about this topic,看来您的选择大致如下: