我编写了一个脚本来隐藏用户输入,在运行时它作为一个简单的脚本工作,但我想集成到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
最后它应该打印用户在密码请求时提示输入的数据,而不是$ pass:
我做错了什么?
答案 0 :(得分:1)
您需要转义 $ pass 周围的字符“。这应该有效:
#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-name。请参阅man bash
。