2016-03-08 45 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

我在這裏重定向我之後沒有查看帖子。不管怎樣,謝謝。 –