2011-07-25 77 views
1

我從C++調用bash腳本,首先執行vfork(),然後調用execv(SHELLPATH, SHELLSCRIPT)。從bash腳本,我再調用一個awk腳本來處理一個命令的輸出,使用:從C++調用awk腳本停在「bozo:wait_for」

cat textfile | ./parseInfo.awk 

我注意到bash腳本運行正常,但是當它到達awk腳本,它只是掛起和有命令行響應:"awk: bozo: wait_for"。我一直無法找到谷歌這個迴應可能意味着什麼。

從awk腳本中做了一些打印後,我注意到當我做一個system()調用時,這是什麼導致這從腳本等待(然後我需要按回車爲了找回命令行提示符)。所以我在做什麼是:

dirNotExistCheck = "[ -d " DIR "]" 
if(system(dirExistCheck) == 1) 
{ 

} 

有沒有辦法調用sysem()而不需要用戶的某種交互?

+1

它似乎在等待一些小丑... –

+2

如果你在C++代碼之外運行,會發生什麼?請注意'cat file | awkScript'幾乎總是可以簡化爲'awkScript文件'。這可能是你問題的一部分。無論如何,確定awk程序是否是問題,或者你是否擁有它嵌套得如此之深。祝你好運。 – shellter

+0

當我將它作爲gawk腳本運行時,系統(dirExistCheck)的返回碼爲-1是非常有趣的。我最終做的是以awk腳本(/ usr/bin/awk)的形式再次運行這個腳本,而不是像我在原始文章中提到的那樣檢查目錄是否存在,我使用system(「mkdir - p「DIR) - 如果目錄已存在,則不會創建該目錄。無論如何,我終於能夠正常工作了,但對於awk的這種「wait_for」響應,我仍然是個謎。 @shelter - 感謝您的反饋。 –

回答

0

如果它在等待被擊中一個鍵,就可以像這樣echo | <your command here>

運行它,我們只是做你的命令閱讀從另一個地方它的輸入。希望這有助於...