2016-03-08 71 views
-1

我写了一个脚本运行时,它可以作为一个简单的脚本中隐藏用户输入的脚本,但我想融入C程序,但它提供了以下错误:运行在C程序

warning: missing whitespace after macro name 

error: expected ')' before '$pass' 

这里的程序:

#include"header.h" 
#define SHELLSCRIPT"\ 
#bin/bash\n\ 
echo 'Password Please:'\n\ 
stty -echo\n\ 
read pass\n\ 
stty echo\n\ 
printf'\n'\n\ 
sleep'2'\n\ 
echo "$pass"\n\ 
" 
int main() 
{ 
puts("Will execute sh with following script:"); 
puts("SHELLSCRIPT"); 
puts("Starting now"); 
system(SHELLSCRIPT); 
return 0; 
} 

如果我更换

echo "$pass" with echo '$pass',它运行,但打印:

Will execute sh with following script 

SHELLSCRIPT 

Starting now 

Password Please: 

$pass 

,而不是通过$在最后的时候在密码提示请它应该打印用户输入的数据:

我到底做错了什么?

+1

1)不要添加不相关的标签,也不要添加不相关的信息。这里没有涉及C代码。 2)这在安全性方面看起来非常糟糕。使用PAM进行用户验证! – Olaf

+0

是谷歌还是维基百科失望? https://en.wikipedia.org/wiki/Pluggable_authentication_module – Olaf

回答

1

您需要转义字符围绕$通过这应该工作:

#define SHELLSCRIPT"\ 
#bin/bash\n\ 
echo 'Password Please:'\n\ 
stty -echo\n\ 
read pass\n\ 
stty echo\n\ 
printf'\n'\n\ 
sleep'2'\n\ 
echo \"$pass\"\n\ 
" 

如果你”的代替 bash将不会取代VAR - 它的价值。见man bash

+0

感谢它的工作。但它仍然给出警告:在宏名称后面缺少空格。知道它是关于什么的? –

+0

我在askubuntu上发布了一个工作版本,你最初问你的问题:http://askubuntu.com/questions/743476/running-script-in-c-program不确定是否有必要在此重新发布。 – KIAaze

+0

我在这里重定向我之后没有查看帖子。不管怎样,谢谢。 –