字符在C中转义

问题描述:

我需要传递一些命令给终端抛出C程序,并在此之后得到它的输入。 作为它的一部分,我有一个必须放置Expect脚本的行。字符在C中转义

FILE *command = popen("script here","r"); 

脚本我需要执行是:

expect -c 'spawn ssh [email protected] cat /proc/stat 

expect { 
-re ".*yes/no.*" { 
send "yes\r" 
exp_continue 
} 
"password:" { 
send -- "password\r" 
} 
} 
interact' 

所以,我需要这样的脚本工作,因为它需要努力逃避几个字符。 我尝试了不同的转义序列,但都是不正确的。

并感谢您的关注。

UPD:

没有逃脱我收到错误在编译时(“, ”流浪程序\ '“ 等 ”前`*语法错误'“)。 我认为这个问题是由新行引起的,但如果我简单地将它写在一行中,脚本就不起作用。我试图使用\ n,但这并没有帮助我。

所以,我不能简单地复制和粘贴脚本到C文件,它需要一些处理

+1

为什么你需要逃避这个脚本的内容?只有在将字符串或字符文字写入C源节点时才需要转义,而不是从外部文件读取数据时。 – templatetypedef 2011-01-13 08:56:21

+0

你尝试过哪些转义序列,结果如何? – 2011-01-13 08:57:41

首先第一件事情,C的字串可以帮助你做出多串的眼睛更容易:

char *script = "expect -c 'spawn ssh [email protected] cat /proc/stat\n\n" 
       "expect {\n" 
       "-re \".*yes/no.*\"\n" 
       "send \"yes\\r\"\n" 
       ... 

编译器会很高兴地为你打包所有这些字符串。当然

注意,\n在编译时变成换行符的字符串,而\\r在编译时变成\r字符串中,该想到的是希望变成在运行时回车。

第二件事,你确定将期望脚本嵌入到可执行程序中是否正确?也许你登录的主机会改变方向;如果将脚本与可执行文件分开,则更换脚本会更容易。 (我不能告诉你在我的生活中写了多少数百个pppd聊天脚本,我只是很高兴它不需要重新编译pppd来使它们工作!)

如果你是硬编码“脚本”在你的C程序,您需要遵循C规则:这意味着逃避嵌入式双引号和反斜杠...

const char script[] = 
    "expect -c 'spawn ssh [email protected] cat /proc/stat\n" 
    "expect { -re \".*yes/no.*\" { send \"yes\\r\" exp_continue }\n" 
    "    \"password:\" { send -- \"password\\r\" }\n" 
    "  }\n" 
    "interact'\n" 

通知我也终止与C换行符逃生线路代码'\ n'。