2013-03-10 34 views
0

我有一個程序,用戶可以使用命令行運行。一旦運行,它就會接收並處理來自鍵盤的命令。從磁盤輸入啓動程序是可能的,如下所示:$ ./program < startScript.sh。但是,只要腳本運行完畢,程序就會退出。有沒有辦法通過使用<的磁盤輸入來啓動程序,該程序不會退出程序並允許讀取其他鍵盤輸入?是否有可能從命令行啓動程序並輸入文件而不終止程序?

回答

0

在程序中使用系統(「暫停」)(在bash中它只是「暫停」),以便它不立即退出。

有替代品,如

  • 僞讀出
  • 無限循環
  • sigsuspend
  • 更多
+0

我應該說明我只能修改從磁盤運行的腳本,而不是程序本身。 – 2013-03-10 08:02:44

+0

我不記得bash等到程序結束的時候。 – Dmitry 2013-03-10 08:03:49

+0

我擔心你可能需要訴諸回憶可執行文件的pid,並不斷地調查kill -0。 – Dmitry 2013-03-10 08:05:05

0

這就要看program是如何編碼。從startScript.sh開始編寫代碼是無法實現的,如果這正是您想要實現的。

你可以做的是寫一個callingScript.sh,首先要求輸入,然後調用program < startScript.sh

+0

startScript.sh未在上述調用中執行,因此將其作爲輸入。 – 2013-03-10 08:07:01

+0

啊,你說得對。我已經編輯了它:) – 2013-03-10 08:18:15

+0

是否可以將腳本傳遞給程序並獲得該程序的提示? – 2013-03-10 08:25:08

1
(cat foo.txt; cat) | ./program 

即,創建一個子shell(這就是括號做),這首先輸出foo.txt的的,之後只是複製無論用戶類型的內容。然後,獲取這個子shell的組合輸出並將其輸入到程序的stdin中。請注意,這也適用於其他組合。假設你想開始一個總是詢問相同問題的程序。最好的方法是使用「預期」,並確保這些問題並沒有改變,但對於一個快速的解決方法,你也可以做這樣的事情:

​​
+0

你能解釋一下這是什麼嗎?我是一名新手shell腳本程序員。 – 2013-03-10 08:08:56

+0

添加了一些解釋。 – 2013-03-10 08:13:47

+0

感謝您的幫助!但是這與追加原始腳本沒有相同的效果嗎?無論如何,我嘗試了你的建議,雖然它允許額外的輸入,但它不會返回程序的提示 – 2013-03-10 08:22:22

0

爲什麼不嘗試這樣的事情

BODY=`./startScript.sh` 
if [ -n "$BODY" ] 
    then cat "$BODY" |./program 
fi 
相關問題